Điều này có nghĩa là các ứng dụng doanh nghiệp có thê tự tin nâng cấp lên 6.0 từ .NET Core 3.1, .NET 5 hay .NET Framework 4.8 mà không lo về độ ôn định cũng như thời gian cam kết của Mi
Trang 1
KHOA CÔNG NGHỆ THÔNG TIN
DAI HOC DIEN LỰC
ELECTRIC POWER UNIVERSITY
Tén bao cao: Téng quan vé NET Framework/ NET core / NET 6; tong quan vé
Kestrel / IIS / NGINX / Apache; tong quan về lập trình với ngôn ngữ Pvython; các bước cài đặt môi trường lập trình; các bước thực
hiện bài tập
Dang Đỉnh Việt Anh
Nguyễn Hữu Việt Anh
Đôn Nguyên Thắng Nguyễn Quốc Việt Giảng viên hướng dẫn: Trần Trung
HÀ NỘI - 2023
Trang 2Muc luc
Trang 3Tổng quan NET 6
Vào tháng 11/2021, MS đã ra mặt bản NET 6 đánh dâu một bước phát triển rat
ngoạn mục cho nền tảng này Cụ thé là lần đầu tiên có một bản cập nhật lớn LTS (Long Term Support) tức là hỗ trợ lâu đài (trong ít nhất 3 năm) hợp nhất
giữa NET Core và NET Framework Trước đây có NET 5 đã là phiên bản tiền đề
đề hợp nhất 2 nền táng NET của Microsoft nhưng chưa phải là LTS mà đến 6.0 mới là LTS Điều này có nghĩa là các ứng dụng doanh nghiệp có thê tự tin nâng
cấp lên 6.0 từ NET Core 3.1, NET 5 hay NET Framework 4.8 mà không lo về độ
ôn định cũng như thời gian cam kết của Microsoft
Bản cập nhật này thực sự có những tính năng mà cộng đồng mong chờ, nôi bật nhất là cơ chế Hot Reload cho ứng dụng NET Ngoài ra chúng ta cũng có phiên bản mới nhất của C# là C# 10 và F# 6 Song song với đó thì Microsoft cũng luôn cải tiền hiệu năng của nền tảng NET qua từng lần ra mắt
Chúng ta có thê điểm qua các thay đổi và các tính năng mới như:
triển tích hợp (IDE) cho nền tảng NET 6 Những ai dùng Visual Studio Code thì
vấn yên tâm là luôn xài được với mọi phiên bản Riêng có Visual Studio thì phải
nâng cấp lên Visual Studio bản 2022 đề có thể phát triển được NET 6 Riêng với
Visual Studio for Mac thi van co thé ding Visual Studio 2019
Các tính năng mới trong NET 6 như sau:
Hỗ tro Production stress-tested danh cho tmg dung Microsoft services, ing dụng cloud chạy bởi các công ty khác, và đã mở mã nguồn
Hỗ trợ trong 3 năm hay gọi là LTS
Nền tảng thống nhất hỗ trợ nhiều loại trình duyét, cloud, desktop, IoT, va mobile
apps, tat ca str dung chung code base co thé share code dé dang
Hiệu năng được cải thiện rat nhiéu va cho tac tac vu I/O cu thé, bang cach giam thời gian thực thị, độ trễ và bộ nhớ sử dụng
C# 10 cải tiễn ngôn ngữ bằng các tính năng như record structs, implicit using, va new lambda capabilities, trong khi trinh bién dich tang kha nang gen code Hot Reload cho phép ban tránh được việc bunld và khởi động lại ứng dụng khi có thay đôi mới trong lúc ứng dụng vẫn đang chạy, hỗ trợ trên Visual Studio 2022 và
từ NET CLI cho C# lẫn Visual Basic
Trang 4Cloud diagnostics duge cai tién voi OpenTelemetry va dotnet monitor, hé trợ cho tìm lỗi trên môi trường Production trên Azure App Service
JSON APIs được tăng khả năng và có hiệu năng cao hơn với source generator cho
Single-page apps được giới thiệu voi ASP.NET Core gid đây sử dung mét pattern linh hoạt giúp bạn có thể sử dung Angular, React hoặc các framework frontend Javascript khac
HTTP/3 được thêm vào ASP.NET Core, HttpClient, và gRPC có thê tương tác với HTTP/S giữa client và server
Cơ chế đọc ghi file (File IO) da hỗ trợ liên kết tượng trưng và cải tiền mạnh mẽ
về hiệu năng với việc viết lại từ đầu FileStream class
Bảo mật được cải tiền bằng việc hỗ trợ OpenSSL 3, phương thức mã hoá ChaCha20Poly 1305, và các biện pháp ngăn chặn chiều sâu, đặc biệt
Source bưuild cho phép tổ chức như Red Had xây dựng NET từ mã nguồn mở và
tự xây dựng cho người dùng của mình
Hỗ trợ
Bán NET 6 là một bản hỗ trợ lâu đài (LTS) được phát hành và được hỗ trợ trong 3 năm Nó hỗ trợ nhiều hệ điều hành bao gồm cả macOS Apple Silicon và Windows Armé4
Red Hand hé tro NET trén Red Hat Enterprise Linux và da làm việc với team .NET 6 được hỗ trợ với Visual Studio 2022 và Visual Studio 2022 for Mac Nó
không hỗ trợ Visual Studio 2019, Visual Studio for Mac 8 hoặc MSBuild 1ó Nếu bạn muốn dùng NET 6 thì phải upgrade lên Visual Studio 2022 Nếu đùng Visual Studio Code thì có thé phát triên sử đụng C# Extension
Có thê bat đầu migrate ứng dụng của mình lên NET 6 từ NET 5 Nó cũng tương
thích tốt khi upgrade từ NET 3.1 và NET 5
Nền tảng thống nhất và mở rộng
Trang 51.2
Có thê dùng 1 nên tảng mà có thê phát triển nhiều loại ung dung tr Desktop, Web,
IoT, WebAssembly, Cloud và có thé chia sé duoc code base dé đàng Một điều
thú vị nữa là NET Multi-platform App UI (NET MAUI) tite 1a chính ta co thé viết code với | project nhưng có thể tạo ra một ứng dụng chạy trên cả Desktop lẫn Mobile .NET MAUI duoc đính kèm trong NET 6
Có thê phát triển cả Windows Desktop với Windows Forms và WPF cũng như trên cloud với ASP.NET Core
HWiéu nang
Các nội dung chu dao trong việc tăng hiệu năng như:
Dynamic PGO: viết tat cha Dynamic Profile-guided Optimization (PGO) cho phép biên địch nhanh, tăng hiệu năng khởi động và tăng khả năng phục vụ nhiều hơn số request (dự tính 26%) số request trên giây
Cải tiễn xử lý JSON
Cải tiễn hiệu năng nhập xuất File, ví du voi NET 5 va NET 6 ghi ghi | file
100MB cho ra 2 két qua rat tot
Write10OMBAsync _.NET 5.0 1,308.2 ms 1.00 3,809 KB Write10OMBAsync NET 6.0 306.8 ms 0.24 3 KB
1.3 Cñ 10
C# 10 có rất nhiều tính năng mới như:
Global using directive: st’ dung global using sẽ không phải using mọi nơi như System namespace chang han
File scoped namespace: khéng can phai long class trong namespace
Record struct
Hot Reload
Tinh năng hot reload là một tính năng được mong đợi nhất hỗ trợ cho nhà phát triển có
thê tăng hiệu quả làm việc Cho phép edit code ngay khi ứng dụng đang chạy, giảm thời
gian chờ rebuild, khởi động lại và điều hướng đến đúng điềm bạn có thay đôi Hot Reload
có sẵn trong dotnet watch CLI va Visual Studio 2022 Bạn có thé str dung Hot Reload voi
các loại ứng dụng khác nhau từ ASP.NET Core, Blazor, NET MAUI, Console, Windows Forms, WPF, WinUI 3, Azure Functions
1.4 Bao mật
Bảo mật được cải tiền đáng ké trong NET 6 từ việc mô hình, mã hoá và ngăn chặn xâm nhập Trên Linux chúng ta có OpenSSL, trên macOS và Windows chúng ta
có chức năng tương tự từ hệ điều hành Với mỗi phiên bản NET chúng ta thường
cần thêm OpenSSL và NET 6 hỗ trợ OpenSSL 3.
Trang 61.5 Arm64
- _ Trên NET Core 3.0 đã hỗ trợ Arm 32 nhưng với NET 6 đã hỗ trợ Arm 64
giúp NET 6 tương thích nhiều loại thiết bị hơn
2.1.1 NGINX la gi
- NGINX la mot web server mạnh mẽ mã nguồn mở Nginx sử dụng kiến trúc đơn
luồng, hướng sự kiện vì thế nó hiệu quả hơn Apache server Nó cũng có thê làm những thứ quan trọng khác, chăng hạn như load balancing, HTTP caching, hay sử dụng như một reverse proxy Nginx là kiến thức không thê thiếu đối với một web developer, system administrator hay devops
- _ Các mốc ra đời và phát triển của Nginx
® - Năm 2002, Igor Sysoev phát triển Nginx ban đầu và công bồ lần đầu vào năm
2004 Tháng 7 năm 201 1, công ty Ngĩinx Inc được thành lập với trụ sở đầu tiên tại San Francisco, California, USA
2.1.2 Tinh ndng cua NGINX
- Nhimg tinh nang cha NGINX
Trang 7Có khả năng xử lý hơn 10.000 kết nỗi cùng lúc với bộ nhớ thấp
Phuc vu tap tin tinh (static files) va lap chi muc tap tin
Tang toc reverse proxy bằng bộ nhớ đệm (cache), cân bằng tải đơn giản và khả
năng chịu lôi
Hỗ trợ tăng tộc với bộ nhớ đệm của FastCGI, uwsgi, SCGI, va cac may chu memcached
Kién trac modular, tăng tốc độ nap trang bang nén gzip ty déng
Hỗễ tro ma hoa SSL va TLS
Cầu hình linh hoạt: lưu lại nhật ký truy vẫn
Chuyên hướng lỗi 3XX-5XX
Rewrite URL (URL rewriting) dung regular expressions
Han ché ty 16 dap img truy van
Giới hạn số kết n6i d6ng thoi hoac truy van tir | dia chi
Khả năng nhúng mã PERL
Hỗ trợ và tương thích với IPv6
Hỗ trợ WebSockets
Hỗ trợ truyền tải file FLV va MP4
2.1.3 Những tính năng máy chủ mail proxy của Ngimx
- - Các phương pháp xác thực :
POP3: USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;
IMAP: LOGIN, AUTH LOGIN/PLAIN/CRAM-MDS;
Trang 8sudo apt-get update
=> Sau khi quá trình cài đặt kêt thúc, bạn có thê kiêm tra mọi thứ là ÔN băng cách
chạy lệnh dưới đây, nó sẽ hiện thị phiên bản NGINX được cai dat:
sudo nginx -v
nginx version: nginx/1.18.2
> Webserver mdi sé duoc cai đặt tại /etc/nginx/ Nếu bạn vào trong thu muc nay, bạn sẽ thấy nhiều tệp tin và thư mục Nhưng thứ quan trọng nhất cần chú ý là tệp
tin nginx.conf va thu muc sites-available
2.1.5 Cau hinh NGINX
- Nhiing thiết lập quan trọng nhất ở trong tập tin nginx.conf, mac dinh no sé nhu thé nay:
types hash max size 2048;
# server tokens off;
# server names hash bucket size 64;
# server name 1mm redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
Trang 9access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip disable "msie6";
# gzip vary on;
# gzip _proxied any;
# gzip comp level 6;
- _ Nhiều thứ trong tệp tin này có thê tính chỉnh đựa theo nhu cầu của bạn, nhưng bạn cũng có thê sử dụng các thiết lập mặc định Một số phần quan trọng của tệp tin cầu hình này là:
¢ worker_processes: Thiét lập này định nghĩa số worker processes mà NGINX
sẽ sử dụng Bởi vì NGINX là đơn luỗng (single threaded), nó thường bằng với
số lõi CPU
¢ worker_connection: Day là số lượng tối đa của các kết nối đồng thời cho mỗi worker process và nói cho các worker process của chúng ta có bao nhiều người
có thê được phục vụ đồng thời bởi NGINX
* access_log & error_log: Day là những tệp tin ma NGINX sé str dụng dé log bat ky lỗi và số lần truy cập Các bản ghi này thường được sử dụng đề gỡ lỗi
hoặc sửa chữa
* gzip: Day là các thiết lập nén GZIP của các NGINX reponse Tinh nang nay co nhiêu thiết lập phụ, phần bị comment bởi mặc định có thê giúp hiệu suất được cải thiện đáng kẻ Trong các thiết lập phụ của GZIP, cần quan tâm
tới gzip comp level, no là mức nén và nằm trong khoảng từ l tới 10 Thông thường, giá trị này không nên lớn hơn 6ö — trên mức này lợi ích từ việc nén là
Trang 10không đáng kề, vì nó cần sử dụng nhiều CPU hon gzip types là một danh sách các kiểu response sẽ được nén
NGINX có thể hỗ trợ nhiều hơn một website, và các tệp tin định nghĩa các trang web của bạn ở trong thư mục /etc/nginx/sites-available
Tuy nhiên, các tệp tin trong thư mục này không “live” — bạn có thê có nhiều tệp tin định nghĩa các trang web ở đây, nhưng NGINX không thực sự làm bất cứ điều
gì với chúng trừ khi chúng được symlink điên kết tượng trưng) tới thư
mục /etc/nginx/sites- -enabled (ban cũng có thé copy chung tới thư mục này, nhưng symlink đảm bảo rằng chỉ có duy nhất một bản copy của mỗi tệp tin được theo đối)
Nó cung cấp cho bạn một phương thức đề nhanh chóng đưa các trang web online hoặc offilne mà không cần phải thực sự xóa bắt kỳ tệp tin nào — khi bạn sẵn sàng cho một trang web online, tạo symlink tới sites-enabled và khởi động lại NGINX Thư mục site-available bao gồm các cầu hình cho các host ảo (virtual host) Nó cho phép web server có thê cầu hình cho nhiều trang web với các cầu hình riêng biệt Các trang web trong thư mục không live và chỉ được cho phép nếu chúng ta
tạo một symlink tới thư mục sifes-enabled
Bạn có thể tạo một tệp tin mới cho ứng dụng của mình hoặc chỉnh sửa một tệp tin
mặc định Một cầu hình thông thường sẽ như dưới đây:
Trang 11location /remoteapp {
}
proxy set header X-Forwarded-For $proxy_add x forwarded _for;
proxy_pass http://remoteAPIServer/;
location /api/v1/ {
proxy_pass https://remoteAPIServer/api/v1/;
proxy_http version 1.1;
proxy_set header Upgrade $http_upgrade:
proxy_set header Connection ‘upgrade’;
proxy_set header Host $host;
proxy_cache bypass $http upgrade:
proxy_redirect http:// https://;
Gidng nhu nginx.conf, no cing str dung khai niém cac ngit canh long nhau (va tat
cả cũng được lồng trong ngữ cảnh HTTP CỦA nginx.conf, vì thế chúng cũng kế
thừa mọi thứ từ nó)
Ngữ cảnh server định nghĩa một server ảo đề xử lý cac request tir client của bạn
Bạn có thê có nhiều khối server, và NGINX sẽ chọn một trong số chúng dựa trên các chỉ thị listen và server name
Trong một khối server, chúng ta định nghĩa nhiều ngữ cảnh locafion được sử dụng
đề quyết định cách xử lý các request từ client Bất cứ khi nào một request đến, NGINX sẽ thử khớp URI tới một trong số các định nghĩa location và xử lý nó cho
« - pF0Xy_ pass sẽ gửi request toi mot proxy server cy thé
« rewrite sé viet lai URI toi dya trén mét regular expression đê một khôi location
có thê xử lý nó
Ngữ cảnh upstream định nghĩa một pool của các server cái NGINX sẽ ủy quyền các request tới Sau khi chung ta tao một khôi upstream và định nghĩa một server bên trong nó chúng có thê tham chiêu nó băng tên bên trong các khoi location
Trang 12Thêm nữa, một ngữ cảnh upstream có thê có nhiều server được gán trong nó vì răng NGINX sẽ làm một vài load balancing khi ủy quyên cac request
Các yêu cầu gửi tới máy chủ sử dụng HTTP còn được gọi tat la HTTP request
Do được cài đặt trên web server (phân cứng) nên Apache hay được gọi là web server hay HTTP server Khi sử dụng thuật ngữ web server, chúng ta hiệu rằng người nói đang đề cập tới góc độ phần mềm
2.2.2 Apache và những web server khác
2.2.2.1 Apache vs NGINX
Ngmx, là một ứng dụng web server được phát hành năm 2004 Ngày nay, no đã phô biến rất nhiều trong giới lập trình web Nginx được tạo đề xử lý các vẫn đề được gọi là c[0k problem (10,000 connections), có nghĩa là web server sử dụng threads đề xử lý truy vấn của khách không thê thực hiện được hơn 10,000 kết nối cùng lúc
Vì Apache sử dụng cầu trúc dang thread, chu so htru cac website nang co traffic lớn sẽ gặp phải vân đề hiệu xuất Nginx là một trong các web server có thê xử lý vấn đề c10k và có lẽ là phần mềm thành công nhất làm việc này
Nginx co kién trúc xử lý dạng “sự kiện” (event) không phải tạo process mới cho mỗi truy vấn Thay vào đó, nó xử lý truy vấn trong một thread duy nhất Master process sẽ quản lý nhiều worker processes mà thực sự quản lý việc xử lý truy vấn Dạng quản lý sự kiện như vậy của Nginx phân tán truy vấn một cách hiệu quả đề đạt hiệu quả quản lý tốt hơn
Nếu ban co m6t website co traffic lon, Nginx la Iya chon toi ưu, VÌ nó có thê xử lý nhiều tiến trình với tài nguyên thấp nhất có thê Không phải ngâu nhiên mà nhiều website lớn như Netflix, Hulu Pinterest, Airbnb đều đang sử dụng nó
Tuy nhiên, đối với những doanh nghiệp vừa và nhỏ, Apache tỏ ra hiệu quá hơn Nginx, vi no dé cau hinh hon, nhiều modules hơnv à là một môi trường thân thiện
cho người mới bắt đầu hơn
2.2.2.2 Apache Tomcat
Tomeat là một web server cũng được phát trién boi Apache Software Foundation,
vì vậy tên chính thức của nó là Apache Tomeat Nó cũng là một server HTTP, tuy nhiên, nó hỗ trợ mạnh cho ứng dụng Java thay vì website tĩnh Tomecat có thê chạy nhiéu ban Java chuyén biét nhu Java Servlet, JavaServer Pages (JSP), Java EL, va WebSocket
Tomcat duge tao dac biét riêng cho Java apps, mac du Apache la vẫn là một server
HTTP Bạn có thể sử đụng Apache với nhiều ngôn ngữ lập trình khác (PHP, Pvython, Perl, vâng vâng.) với sự giúp đỡ của module Apache phù hợp (mod_ php, mod _ python, mod_perl, etc.)