<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="https://publishpress.com/"
	>

<channel>
	<title>phi lai, Author at Tomoshare</title>
	<atom:link href="https://blog.tomosia.com.vn/author/philai/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.tomosia.com.vn/author/philai/</link>
	<description>Kênh chia sẻ kiến thức Tomosia Việt Nam</description>
	<lastBuildDate>Tue, 28 Apr 2026 09:37:56 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://blog.tomosia.com.vn/wp-content/uploads/2023/09/cropped-icon-32x32.png</url>
	<title>phi lai, Author at Tomoshare</title>
	<link>https://blog.tomosia.com.vn/author/philai/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Basic Design và Detail Design trong dự án Nhật (Giới thiệu)</title>
		<link>https://blog.tomosia.com.vn/basic-design-va-detail-design-trong-du-an-nhat-gioi-thieu/</link>
					<comments>https://blog.tomosia.com.vn/basic-design-va-detail-design-trong-du-an-nhat-gioi-thieu/#respond</comments>
		
		<dc:creator><![CDATA[phi lai]]></dc:creator>
		<pubDate>Mon, 02 Feb 2026 06:19:36 +0000</pubDate>
				<category><![CDATA[System Design]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=3471</guid>

					<description><![CDATA[<p>Tài liệu Basic Design và Detail Design trong dự án Nhật Trong những năm đầu đi làm và&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/basic-design-va-detail-design-trong-du-an-nhat-gioi-thieu/">Basic Design và Detail Design trong dự án Nhật (Giới thiệu)</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 id="tai-lieu-basic-design-va-detail-design-trong-du-an-nhat" class="wp-block-heading">Tài liệu Basic Design và Detail Design trong dự án Nhật</h3>



<p class="wp-block-paragraph">Trong những năm đầu đi làm và có cơ hội làm việc các dự án Nhật, tôi được tham gia vào nhiều dự án phát triển hệ thống quản lý sản xuất.</p>



<p class="wp-block-paragraph">Qua quá trình đó, tôi nhận ra cách người Nhật tổ chức tài liệu thiết kế phần mềm </p>



<p class="wp-block-paragraph">— gồm <strong>Basic Design</strong> và <strong>Detail Design</strong> </p>



<p class="wp-block-paragraph">— là nền tảng cốt lõi của toàn bộ quy trình phát triển. Mọi thứ được mô tả chi tiết, có quy tắc, và giúp đội dự án hiểu cùng một ngôn ngữ.</p>



<p class="wp-block-paragraph">Bài viết này chia sẻ cách hiểu, cấu trúc và phương pháp viết tài liệu thiết kế phần mềm trong môi trường dự án Nhật Bản, dựa trên kinh nghiệm thực tế triển khai nhiều module sản xuất khác nhau.</p>



<p class="wp-block-paragraph"><strong>(Lưu ý: các ảnh trong bài đăng được tham khảo từ nhiều nguồn kỹ thuật trang web Nhật để giúp minh họa rõ hơn cho nội dung)</strong></p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.zooops-japan.co.jp/wordpress/wp-content/uploads/2019/03/V%E5%AD%97%E3%83%A2%E3%83%87%E3%83%AB%E5%9B%B3800_400pix.jpg" alt="V字モデル システム開発工程"/></figure>



<figure class="wp-block-image size-full is-style-default"><img fetchpriority="high" decoding="async" width="824" height="545" src="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-10.png" alt="" class="wp-image-3476" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-10.png 824w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-10-300x198.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-10-768x508.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-10-380x251.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-10-800x529.png 800w" sizes="(max-width: 824px) 100vw, 824px" /></figure>



<p class="wp-block-paragraph"></p>



<h3 id="1-phan-biet-basic-design-va-detail-design" class="wp-block-heading">1. Phân biệt Basic Design và Detail Design</h3>



<p class="wp-block-paragraph"><strong>Basic Design</strong> (基本設計書) là tài liệu mô tả tổng quan hệ thống: định nghĩa phạm vi, quy tắc nghiệp vụ, và luồng xử lý chính. </p>



<p class="wp-block-paragraph">Đây là giai đoạn <strong>&#8220;thiết kế khung&#8221;</strong>.</p>



<p class="wp-block-paragraph"><strong>Detail Design</strong> (詳細設計書) là tài liệu triển khai chi tiết, mô tả rõ cách hệ thống hoạt động bên trong: logic xử lý, cấu trúc dữ liệu, và cách các thành phần giao tiếp với nhau. </p>



<p class="wp-block-paragraph">Đây là bước <strong>&#8220;thiết kế chi tiết kỹ thuật&#8221;.</strong></p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="543" src="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/reiwa_sysdesign_06_002-1024x543.jpg" alt="" class="wp-image-3472" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/reiwa_sysdesign_06_002-1024x543.jpg 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/reiwa_sysdesign_06_002-300x159.jpg 300w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/reiwa_sysdesign_06_002-768x407.jpg 768w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/reiwa_sysdesign_06_002-1536x814.jpg 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/reiwa_sysdesign_06_002-2048x1086.jpg 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/reiwa_sysdesign_06_002-380x201.jpg 380w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/reiwa_sysdesign_06_002-800x424.jpg 800w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/reiwa_sysdesign_06_002-1160x615.jpg 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/reiwa_sysdesign_06_002.jpg 2520w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>Basic Design</strong> giúp toàn bộ nhóm hiểu <strong>“hệ thống cần làm gì”, </strong></p>



<p class="wp-block-paragraph"><strong>Detail Design</strong> giúp kỹ sư nắm rõ <strong>“hệ thống sẽ làm như thế nào”. </strong></p>



<p class="wp-block-paragraph">Hai giai đoạn này gắn liền với nhau và quyết định trực tiếp đến chất lượng dự án.</p>



<h3 id="2-cau-truc-cua-basic-design" class="wp-block-heading">2. Cấu trúc của Basic Design</h3>



<p class="wp-block-paragraph">Trong dự án Nhật, Basic Design thường có cấu trúc tiêu chuẩn như sau:</p>



<ul class="wp-block-list">
<li><strong>Tên hệ thống và module:</strong> ví dụ “生産管理システム (Production Management System)”.</li>



<li><strong>Tên màn hình hoặc chức năng:</strong> ví dụ “P_I201 – 生産指示登録画面 (Màn hình đăng ký lệnh sản xuất)”.</li>



<li><strong>Mục tiêu:</strong> mô tả mục đích nghiệp vụ của chức năng (ví dụ: đăng ký, sửa, xóa lệnh sản xuất theo mã sản phẩm).</li>



<li><strong>Luồng xử lý tổng quan:</strong> trình bày sơ đồ xử lý từ nhập dữ liệu đến lưu trữ và phản hồi.</li>



<li><strong>Dữ liệu chính:</strong> mô tả các bảng liên quan như ProductionOrder, ProductMaster, LineMaster&#8230;</li>



<li><strong>Quy tắc nghiệp vụ:</strong> mô tả ràng buộc (ví dụ: ngày chỉ thị không nhỏ hơn ngày hiện tại, số lượng > 0).</li>
</ul>



<h3 id="3-cau-truc-chi-tiet-cua-detail-design" class="wp-block-heading">3. Cấu trúc chi tiết của Detail Design</h3>



<p class="wp-block-paragraph">Detail Design cụ thể hóa từng nội dung của Basic Design để lập trình viên có thể triển khai chính xác. Dưới đây là cấu trúc thông thường trong dự án Nhật:</p>



<h4 id="3-1-thong-tin-chung-ve-man-hinh-chuc-nang" class="wp-block-heading">3.1. Thông tin chung về màn hình / chức năng</h4>



<p class="wp-block-paragraph">Ví dụ: </p>



<p class="wp-block-paragraph">Mã chức năng: <strong>P_I201</strong> </p>



<p class="wp-block-paragraph">Tên chức năng: <strong>生産指示登録画面 (Màn hình đăng ký lệnh sản xuất)</strong> </p>



<p class="wp-block-paragraph">Người dùng: Bộ phận kế hoạch sản xuất </p>



<p class="wp-block-paragraph">Mục tiêu: Tạo lệnh sản xuất mới hoặc chỉnh sửa lệnh đã có. </p>



<p class="wp-block-paragraph">Điều kiện truy cập: Người dùng có quyền “製造指示管理”.</p>



<h4 id="3-2-mo-ta-cac-truong-du-lieu-field-definition" class="wp-block-heading">3.2. Mô tả các trường dữ liệu (Field Definition)</h4>



<figure class="wp-block-image size-large"><img decoding="async" src="https://pm-rasinban.com/wp-content/uploads/2019/09/class-chart.jpg" alt="詳細設計 クラス図 サンプル"/></figure>



<p class="wp-block-paragraph">Các trường trong màn hình được mô tả chi tiết:</p>



<ul class="wp-block-list">
<li>Tên hiển thị: “生産指示番号 (Mã chỉ thị sản xuất)”</li>



<li>Kiểu dữ liệu: String</li>



<li>Bắt buộc: Có</li>



<li>Giá trị mặc định: Tự sinh theo format YYYYMMDD-nnn</li>



<li>Nguồn dữ liệu: Sequence từ bảng ProductionOrder</li>



<li>Mô tả: Mã duy nhất của lệnh sản xuất trong hệ thống</li>
</ul>



<h4 id="3-3-mapping-du-lieu-data-mapping" class="wp-block-heading">3.3. Mapping dữ liệu (Data Mapping)</h4>



<p class="wp-block-paragraph">Ví dụ: </p>



<p class="wp-block-paragraph">ProductionOrderNo → ProductionOrder.OrderNo </p>



<p class="wp-block-paragraph">ProductCode → ProductMaster.ProductCode </p>



<p class="wp-block-paragraph">PlanDate → ProductionOrder.PlanDate</p>



<h4 id="3-4-logic-xu-ly-processing-logic" class="wp-block-heading">3.4. Logic xử lý (Processing Logic)</h4>



<figure class="wp-block-image size-large"><img decoding="async" src="https://pm-rasinban.com/wp-content/uploads/2019/09/IPO-doc.jpg" alt="IPO図 詳細設計 処理フロー"/><figcaption class="wp-element-caption">出典：PMラシンバン「IPO図（Input Process Output）による処理設計の例」</figcaption></figure>



<p class="wp-block-paragraph">Ví dụ: </p>



<p class="wp-block-paragraph">Khi người dùng nhấn “登録 (Đăng ký)” </p>



<p class="wp-block-paragraph">→ kiểm tra dữ liệu đầu vào </p>



<p class="wp-block-paragraph">→ ghi vào bảng ProductionOrder </p>



<p class="wp-block-paragraph">→ hiển thị thông báo “登録が完了しました” (Đăng ký thành công).</p>



<h4 id="3-5-xu-ly-loi-va-thong-bao-error-handling" class="wp-block-heading">3.5. Xử lý lỗi và thông báo (Error Handling)</h4>



<p class="wp-block-paragraph">Ví dụ: </p>



<p class="wp-block-paragraph">ERR201 – Ngày sản xuất nhỏ hơn ngày hiện tại → “生産日が本日より前です。”</p>



<p class="wp-block-paragraph">ERR202 – Mã sản phẩm không tồn tại → “製品コードが存在しません。”</p>



<h4 id="3-6-giao-dien-nguoi-dung-ui-layout-tham-khao" class="wp-block-heading">3.6. Giao diện người dùng (UI Layout) &#8211; tham khảo</h4>



<figure class="wp-block-image size-full"><img decoding="async" width="901" height="641" src="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-12.png" alt="" class="wp-image-3479" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-12.png 901w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-12-300x213.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-12-768x546.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-12-380x270.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-12-800x569.png 800w" sizes="(max-width: 901px) 100vw, 901px" /></figure>



<p class="wp-block-paragraph">Mô tả bố cục màn hình: </p>



<p class="wp-block-paragraph">&#8211; Vùng nhập thông tin lệnh sản xuất (sản phẩm, ngày, số lượng) </p>



<p class="wp-block-paragraph">&#8211; Bảng danh sách lệnh đã tạo </p>



<p class="wp-block-paragraph">&#8211; Nút chức năng: Đăng ký / Xóa / Tìm kiếm / Reset </p>



<p class="wp-block-paragraph">&#8211; Điều kiện hiển thị: chỉ bật nút Xóa khi chọn một dòng hợp lệ.</p>



<h3 id="4-moi-lien-he-giua-basic-design-va-detail-design" class="wp-block-heading">4. Mối liên hệ giữa Basic Design và Detail Design</h3>



<p class="wp-block-paragraph"> Ví dụ: </p>



<p class="wp-block-paragraph">Basic quy định “Ngày chỉ thị không nhỏ hơn ngày hiện tại” </p>



<p class="wp-block-paragraph">→ Detail cụ thể hóa điều kiện kiểm tra “PlanDate &lt; Today → ERR201”。</p>



<h3 id="5-ket-luan" class="wp-block-heading">5. Kết luận</h3>



<p class="wp-block-paragraph">Việc viết tài liệu Basic Design và Detail Design là kỹ năng quan trọng giúp dự án Nhật Bản duy trì tính chính xác và khả năng bảo trì. </p>



<p class="wp-block-paragraph">Một tài liệu rõ ràng, thống nhất và có cấu trúc giúp tất cả các bên </p>



<p class="wp-block-paragraph">— từ kỹ sư, tester, đến quản lý </p>



<p class="wp-block-paragraph">— phối hợp hiệu quả và hạn chế sai sót.</p>



<p class="wp-block-paragraph">Nếu Basic Design giúp mọi người hiểu <strong>“cái gì cần làm”</strong>, thì Detail Design hướng dẫn chi tiết <strong>“làm như thế nào”</strong>. </p>



<p class="wp-block-paragraph">Khi hai phần này được liên kết chặt chẽ, dự án sẽ đạt độ ổn định, chính xác và phản ánh đúng tinh thần kỹ lưỡng của kỹ sư Nhật.</p>
<p>The post <a href="https://blog.tomosia.com.vn/basic-design-va-detail-design-trong-du-an-nhat-gioi-thieu/">Basic Design và Detail Design trong dự án Nhật (Giới thiệu)</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/basic-design-va-detail-design-trong-du-an-nhat-gioi-thieu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Stress Test with AWS Worker</title>
		<link>https://blog.tomosia.com.vn/stress-test-with-aws-worker/</link>
					<comments>https://blog.tomosia.com.vn/stress-test-with-aws-worker/#comments</comments>
		
		<dc:creator><![CDATA[phi lai]]></dc:creator>
		<pubDate>Thu, 23 Oct 2025 10:37:36 +0000</pubDate>
				<category><![CDATA[Stress Test]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=3457</guid>

					<description><![CDATA[<p>1. Mục tiêu của stress test chịu tải trong hệ thống (AWS EC2 Worker và SQS) Khi hệ&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/stress-test-with-aws-worker/">Stress Test with AWS Worker</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 id="1-muc-tieu-cua-stress-test-chiu-tai-trong-he-thong-aws-ec2-worker-va-sqs" class="wp-block-heading">1. Mục tiêu của stress test chịu tải trong hệ thống (AWS EC2 Worker và SQS)</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-2-1024x576.png" alt="Kiến trúc AWS EC2 Worker SQS" class="wp-image-3458" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-2-1024x576.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-2-300x169.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-2-768x432.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-2-380x214.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-2-800x450.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-2-1160x653.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-2.png 1344w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Khi hệ thống xử lý theo mô hình bất đồng bộ (asynchronous) — trong đó API nhận dữ liệu, đẩy vào hàng đợi (queue), và worker chạy nền (trên EC2) xử lý dần — việc đánh giá khả năng chịu tải không chỉ là đo tốc độ phản hồi API mà là <strong>đánh giá toàn bộ chuỗi xử lý message</strong>.</p>



<p class="wp-block-paragraph">Stress test giúp xác định hệ thống có thể hấp thụ và xử lý bao nhiêu message mỗi giây, khi worker EC2 thực thi song song trên nhiều thread. Đây là bài test quan trọng để tối ưu số lượng instance, cấu hình thread pool và giới hạn throughput của hàng đợi SQS.</p>



<ul class="wp-block-list">
<li>Đo thời gian trung bình để xử lý một lượng lớn message.</li>



<li>Xác định giới hạn throughput trước khi queue backlog.</li>



<li>Phát hiện điểm nghẽn (bottleneck) ở tầng API, SQS hoặc Worker.</li>



<li>Đánh giá mức ổn định và khả năng phục hồi khi tải giảm.</li>
</ul>



<h3 id="2-kien-truc-ha-tang-dung-de-stress-test" class="wp-block-heading">2. Kiến trúc hạ tầng dùng để stress test</h3>



<p class="wp-block-paragraph">Dưới đây là kiến trúc tham chiếu của hệ thống AWS EC2 Worker &amp; SQS trong bài test:</p>



<figure class="wp-block-table is-style-stripes"><table class="has-fixed-layout"><thead><tr><th>Thành phần</th><th>Vai trò</th><th>Ghi chú khi test</th></tr></thead><tbody><tr><td><strong>API Gateway</strong></td><td>Nhận request từ JMeter và đẩy payload vào SQS.</td><td>Bật log để theo dõi tốc độ gửi và lỗi HTTP.</td></tr><tr><td><strong>Amazon SQS</strong></td><td>Hàng đợi lưu message cần xử lý.</td><td>Dùng <em>Standard Queue</em> để đạt throughput cao nhất.</td></tr><tr><td><strong>EC2 Worker (Java)</strong></td><td>Ứng dụng Java chạy trên EC2, đọc message từ SQS và xử lý nghiệp vụ.</td><td>Chạy nhiều thread song song; điều chỉnh thread pool để tối ưu hiệu năng.</td></tr><tr><td><strong>Amazon RDS</strong></td><td>Lưu kết quả xử lý hoặc log hệ thống.</td><td>Tối ưu connection pool (HikariCP hoặc datasource) để tránh quá tải.</td></tr><tr><td><strong>CloudWatch</strong></td><td>Thu thập metric từ SQS và EC2.</td><td>Theo dõi CPU, queue depth, backlog, throughput.</td></tr></tbody></table></figure>



<h3 id="3-chuan-bi-du-lieu-test" class="wp-block-heading">3. Chuẩn bị dữ liệu test</h3>



<p class="wp-block-paragraph">Dữ liệu test cần mô phỏng hành vi thật của hệ thống, bao gồm payload gửi vào API và cấu hình tốc độ bắn tải. Thông thường, các test case được lưu trong file Excel — mỗi sheet là một loại test (load, spike, stability&#8230;).</p>



<figure class="wp-block-table is-style-stripes"><table class="has-fixed-layout"><thead><tr><th>Tên test</th><th>Số request</th><th>Ramp-up time (giây)</th><th>Tốc độ gửi (req/s)</th><th>Mục tiêu</th></tr></thead><tbody><tr><td><code>Load_500_60</code></td><td>500</td><td>60</td><td>~8</td><td>Đo năng lực xử lý trung bình</td></tr><tr><td><code>Spike_2000_60</code></td><td>2000</td><td>60</td><td>~33</td><td>Kiểm tra phản ứng khi tải tăng nhanh</td></tr><tr><td><code>Stable_10000_300</code></td><td>10000</td><td>300</td><td>~33</td><td>Đánh giá độ ổn định dài hạn</td></tr></tbody></table></figure>



<h4 id="vi-du-ket-qua-thuc-te-case-1-500-threads-60-giay" class="wp-block-heading">Ví dụ: Kết quả thực tế Case 1 (500 threads / 60 giây)</h4>



<p class="wp-block-paragraph">Dưới đây là kết quả kiểm thử được ghi nhận (theo file Excel và log giám sát thực tế):</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="152" src="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-3-1024x152.png" alt="" class="wp-image-3459" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-3-1024x152.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-3-300x44.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-3-768x114.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-3-1536x227.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-3-380x56.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-3-800x118.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-3-1160x172.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-3.png 1729w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Trong bài test này (Case 1), hệ thống được giả lập với <strong>500 người dùng đồng thời</strong> trong vòng <strong>60 giây</strong>. </p>



<p class="wp-block-paragraph">Kết quả cho thấy throughput trung bình đạt khoảng <strong>8.3 requests/giây</strong> với <strong>100% thành công</strong>, thời gian phản hồi trung bình là <strong>227ms</strong> và cực đại là <strong>307ms</strong>.</p>



<p class="wp-block-paragraph"> Điều này cho thấy hệ thống có khả năng xử lý ổn định ở <strong>mức tải trung bình.</strong></p>



<p class="wp-block-paragraph">Jmeter</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="123" src="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-4-1024x123.png" alt="" class="wp-image-3460" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-4-1024x123.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-4-300x36.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-4-768x92.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-4-380x46.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-4-800x96.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-4-1160x139.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-4.png 1449w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">EC2</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1022" height="364" src="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-5.png" alt="" class="wp-image-3461" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-5.png 1022w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-5-300x107.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-5-768x274.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-5-380x135.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-5-800x285.png 800w" sizes="auto, (max-width: 1022px) 100vw, 1022px" /></figure>



<p class="wp-block-paragraph">Worker</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="355" src="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-6.png" alt="" class="wp-image-3462" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-6.png 1000w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-6-300x107.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-6-768x273.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-6-380x135.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-6-800x284.png 800w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure>



<p class="wp-block-paragraph">RDS</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="538" height="362" src="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-7.png" alt="" class="wp-image-3463" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-7.png 538w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-7-300x202.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-7-380x256.png 380w" sizes="auto, (max-width: 538px) 100vw, 538px" /></figure>



<p class="wp-block-paragraph">SQS</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="312" src="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-8-1024x312.png" alt="" class="wp-image-3464" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-8-1024x312.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-8-300x91.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-8-768x234.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-8-380x116.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-8-800x244.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-8-1160x353.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-8.png 1448w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Mẫu Jmeter setting</p>



<pre class="wp-block-code"><code>CSV Data Set Config: Filename: data_test.csv 
Variable Names: message_id,payload 
Recycle on EOF: True 
HTTP Body: { 
  "messageId": "${message_id}",
  "payload": "${payload}",
  "timestamp": "${__time(yyyy-MM-dd'T'HH:mm:ss)}"
 }</code></pre>



<h3 id="4-cau-hinh-jmeter-de-gui-du-lieu-len-aws" class="wp-block-heading">4. Cấu hình JMeter để gửi dữ liệu lên AWS</h3>



<p class="wp-block-paragraph">Công cụ được sử dụng là <strong>Apache JMeter</strong> — chuyên dùng để tạo tải HTTP và kiểm tra hiệu năng API. Mỗi request được gửi tới API Gateway, sau đó dữ liệu được đẩy vào hàng đợi SQS để worker EC2 xử lý.</p>



<pre class="wp-block-code"><code>Thread Group:
  Number of Threads (users): 500
  Ramp-up Period: 60
  Loop Count: 1

HTTP Request Sampler:
  Method: POST
  URL: https://{api-id}.execute-api.{region}.amazonaws.com/prod/push
  Body Data:
  {
    "messageId": "${__UUID()}",
    "payload": "${__RandomString(32,ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890)}",
    "timestamp": "${__time(yyyy-MM-dd'T'HH:mm:ss)}"
  }

HTTP Header Manager:
  Content-Type: application/json
  x-api-key: ${API_KEY}</code></pre>



<p class="wp-block-paragraph">Chạy test bằng chế độ non-GUI để tiết kiệm tài nguyên:</p>



<pre class="wp-block-code"><code>jmeter -n -t HTTPRequest_500_60_001.jmx -l results.csv -JAPI_KEY=xxxx</code></pre>



<p class="wp-block-paragraph">Nếu cần mô phỏng tăng tải dần, bạn có thể dùng plugin <strong>Stepping Thread Group</strong> để tăng số luồng từng giai đoạn, giúp kết quả thực tế hơn.</p>



<h3 id="5-giam-sat-ec2-worker-va-hang-doi-sqs" class="wp-block-heading">5. Giám sát EC2 Worker và hàng đợi SQS</h3>



<p class="wp-block-paragraph">Trong quá trình test, CloudWatch là công cụ chính để giám sát hệ thống. Các metric cần chú ý:</p>



<figure class="wp-block-table is-style-stripes"><table class="has-fixed-layout"><thead><tr><th>Metric</th><th>Nguồn</th><th>Ý nghĩa</th></tr></thead><tbody><tr><td><code>ApproximateNumberOfMessagesVisible</code></td><td>SQS</td><td>Số message đang chờ xử lý. Nếu tăng liên tục → worker xử lý không kịp.</td></tr><tr><td><code>ApproximateAgeOfOldestMessage</code></td><td>SQS</td><td>Tuổi của message lâu nhất trong queue. Nếu tăng nhanh → có backlog.</td></tr><tr><td><code>CPUUtilization</code></td><td>EC2</td><td>Theo dõi mức sử dụng CPU của worker Java.</td></tr><tr><td><code>NetworkIn/Out</code></td><td>EC2</td><td>Lưu lượng xử lý qua API hoặc đọc/ghi dữ liệu.</td></tr><tr><td><code>DBConnections</code></td><td>RDS</td><td>Số kết nối tới cơ sở dữ liệu. Nếu tăng đột biến → nghẽn kết nối.</td></tr></tbody></table></figure>



<h3 id="6-phan-tich-ket-qua-va-danh-gia-he-thong" class="wp-block-heading">6. Phân tích kết quả và đánh giá hệ thống</h3>



<p class="wp-block-paragraph">Sau khi test, cần đối chiếu kết quả từ JMeter (thời gian phản hồi, throughput) với metric từ CloudWatch (queue depth, CPU, backlog). Một hệ thống tốt là khi:</p>



<ul class="wp-block-list">
<li>Queue depth không tăng mãi, mà dao động quanh ngưỡng ổn định.</li>



<li>CPU trên EC2 được sử dụng hiệu quả (~60–80%), không nghẽn 100% liên tục.</li>



<li>Throughput duy trì ổn định trong suốt thời gian test.</li>



<li>Số message trong DLQ = 0 hoặc rất thấp.</li>
</ul>



<h3 id="7-ket-luan" class="wp-block-heading">7. Kết luận</h3>



<p class="wp-block-paragraph">Stress test trên AWS EC2 Worker và SQS giúp bạn hiểu được giới hạn chịu tải của hệ thống cũng như khả năng tự phục hồi sau khi backlog.  
Khi theo dõi đúng metric và xác định rõ “ngưỡng nghẽn” (bottleneck), bạn có thể điều chỉnh thread pool, số lượng EC2 instance hoặc kích thước hàng đợi để đạt hiệu suất tối ưu.</p>



<h4 id="tai-lieu-tham-khao" class="wp-block-heading">Tài liệu tham khảo</h4>



<ul class="wp-block-list">
<li><a href="https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-monitoring.html" target="_blank">Amazon SQS Monitoring Guide</a></li>



<li><a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance.html" target="_blank">Amazon EC2 Monitoring</a></li>



<li><a href="https://jmeter.apache.org/usermanual/" target="_blank">Apache JMeter User Manual</a></li>



<li><a href="https://aws.amazon.com/blogs/compute/" target="_blank">AWS Compute Blog</a></li>
</ul>
<p>The post <a href="https://blog.tomosia.com.vn/stress-test-with-aws-worker/">Stress Test with AWS Worker</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/stress-test-with-aws-worker/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Re-platforming Java với AWS Serverless Java Container</title>
		<link>https://blog.tomosia.com.vn/re-platforming-java-aws-serverless-java-container/</link>
					<comments>https://blog.tomosia.com.vn/re-platforming-java-aws-serverless-java-container/#comments</comments>
		
		<dc:creator><![CDATA[phi lai]]></dc:creator>
		<pubDate>Thu, 23 Oct 2025 02:39:15 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=3434</guid>

					<description><![CDATA[<p>1. Vì sao nên đưa Java lên serverless? Java đã là một trong những lựa chọn hàng đầu&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/re-platforming-java-aws-serverless-java-container/">Re-platforming Java với AWS Serverless Java Container</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="780" height="268" src="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/serverless-java-container.png" alt="" class="wp-image-3437" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/serverless-java-container.png 780w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/serverless-java-container-300x103.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/serverless-java-container-768x264.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/serverless-java-container-380x131.png 380w" sizes="auto, (max-width: 780px) 100vw, 780px" /></figure>



<h3 id="1-vi-sao-nen-dua-java-len-serverless" class="wp-block-heading">1. Vì sao nên đưa Java lên serverless?</h3>



<p class="wp-block-paragraph">Java đã là một trong những lựa chọn hàng đầu cho ứng dụng doanh nghiệp trong hơn 25 năm, nhờ khả năng chạy đa nền tảng, hiệu suất ổn định và cộng đồng phát triển lớn. Tuy nhiên, khi nói đến kiến trúc <strong>serverless</strong> – đặc biệt với AWS Lambda – cách triển khai ứng dụng Java đã thay đổi đáng kể.</p>



<p class="wp-block-paragraph">Thay vì phải duy trì JVM và máy chủ hoạt động 24/7, ứng dụng của bạn chỉ chạy khi có sự kiện được kích hoạt. Hạ tầng tự động mở rộng, và bạn chỉ trả phí cho thời gian thực thi thực tế. Mô hình này giúp giảm chi phí vận hành, đơn giản hóa hạ tầng, đồng thời cho phép bạn tập trung vào phần logic ứng dụng.</p>



<h3 id="2-java-truyen-thong-so-voi-aws-lambda" class="wp-block-heading">2. Java truyền thống so với AWS Lambda</h3>



<p class="wp-block-paragraph">Ứng dụng Java truyền thống thường chạy trên các máy chủ ứng dụng như <em>Apache Tomcat</em>, <em>Jetty</em>, <em>JBoss</em> hoặc <em>WebLogic</em>. JVM luôn hoạt động, lắng nghe request HTTP, và xử lý luồng song song.</p>



<p class="wp-block-paragraph">Trong khi đó, <strong>AWS Lambda</strong> hoạt động theo mô hình hướng sự kiện (event-driven):</p>



<ul class="wp-block-list">
<li>Mỗi hàm chỉ xử lý một request hoặc event duy nhất.</li>



<li>Không cần máy chủ HTTP riêng.</li>



<li>Tự động mở rộng và dừng khi không có request.</li>



<li>Giới hạn thời gian thực thi tối đa 15 phút và 10 GB RAM.</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="947" height="634" src="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image.png" alt="" class="wp-image-3438" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image.png 947w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-300x201.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-768x514.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-380x254.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-800x536.png 800w" sizes="auto, (max-width: 947px) 100vw, 947px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="497" height="374" src="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-1.png" alt="" class="wp-image-3439" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-1.png 497w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-1-300x225.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2025/10/image-1-380x286.png 380w" sizes="auto, (max-width: 497px) 100vw, 497px" /></figure>



<h3 id="3-aws-serverless-java-container-la-gi" class="wp-block-heading">3. AWS Serverless Java Container là gì?</h3>



<p class="wp-block-paragraph"><strong>AWS Serverless Java Container</strong> là thư viện giúp bạn chạy các framework Java phổ biến như <em>Spring Boot</em>, <em>Jakarta EE</em>, <em>Micronaut</em> hoặc <em>Jersey</em> trên AWS Lambda mà không cần viết lại toàn bộ mã nguồn.</p>



<p class="wp-block-paragraph">Thư viện hoạt động như một <strong>adapter</strong> – nó chuyển các sự kiện từ Lambda thành request/response kiểu <em>Servlet</em> quen thuộc. Nhờ đó, ứng dụng Java có thể hoạt động bình thường chỉ với một số thay đổi nhỏ ở phần entry point.</p>



<p class="wp-block-paragraph">Phiên bản <strong>v2 (2024)</strong> mang lại nhiều cải tiến quan trọng:</p>



<ul class="wp-block-list">
<li>Hỗ trợ <strong>Jakarta EE 10+</strong>.</li>



<li>Tương thích <strong>Spring Framework 6.x</strong> và <strong>Spring Boot 3.x</strong>.</li>



<li>Cập nhật hỗ trợ <strong>Jersey 3.x</strong>.</li>



<li>Tối ưu hiệu suất và giảm kích thước file JAR.</li>
</ul>



<h3 id="4-vi-du-chuyen-ung-dung-spring-boot-3-sang-lambda" class="wp-block-heading">4. Ví dụ: Chuyển ứng dụng Spring Boot 3 sang Lambda</h3>



<p class="wp-block-paragraph">Dưới đây là ví dụ cơ bản để triển khai ứng dụng Spring Boot 3 lên AWS Lambda sử dụng Serverless Java Container v2.</p>



<h4 id="buoc-1-them-dependency-vao-pom-xml" class="wp-block-heading">Bước 1: Thêm dependency vào <code>pom.xml</code></h4>



<pre class="wp-block-code"><code>
&lt;dependency&gt;
    &lt;groupId&gt;com.amazonaws.serverless&lt;/groupId&gt;
    &lt;artifactId&gt;aws-serverless-java-container-springboot3&lt;/artifactId&gt;
    &lt;version&gt;2.0.0&lt;/version&gt;
&lt;/dependency&gt;
  </code></pre>



<h4 id="buoc-2-loai-bo-tomcat-khoi-build" class="wp-block-heading">Bước 2: Loại bỏ Tomcat khỏi build</h4>



<p class="wp-block-paragraph">Spring Boot mặc định nhúng Tomcat. Vì Lambda sử dụng API Gateway để xử lý HTTP, bạn có thể loại bỏ Tomcat để giảm kích thước package và tăng tốc khởi động.</p>



<pre class="wp-block-code"><code>&lt;excludes&gt;
    &lt;exclude&gt;org.apache.tomcat.embed:*&lt;/exclude&gt;
&lt;/excludes&gt;
  </code></pre>



<h4 id="buoc-3-tao-handler-cho-lambda" class="wp-block-heading">Bước 3: Tạo handler cho Lambda</h4>



<p class="wp-block-paragraph">Ví dụ cơ bản:</p>



<pre class="wp-block-code"><code>
public class StreamLambdaHandler 
        extends SpringBootRequestHandler&lt;APIGatewayV2HTTPEvent, APIGatewayV2HTTPResponse&gt; {
}
  </code></pre>



<p class="wp-block-paragraph">Hoặc nếu bạn cần nhiều quyền kiểm soát hơn:</p>



<pre class="wp-block-code"><code>
public class CustomHandler implements RequestStreamHandler {

    private static final SpringDelegatingLambdaContainerHandler&lt;
        APIGatewayV2HTTPEvent, APIGatewayV2HTTPResponse&gt; handler;

    static {
        handler = new SpringDelegatingLambdaContainerHandler&lt;&gt;(Application.class);
    }

    @Override
    public void handleRequest(InputStream input, OutputStream output, Context context)
            throws IOException {
        handler.proxyStream(input, output, context);
    }
}

  </code></pre>



<h4 id="buoc-4-cau-hinh-bien-moi-truong" class="wp-block-heading">Bước 4: Cấu hình biến môi trường</h4>



<p class="wp-block-paragraph">Đặt biến môi trường <code>MAIN_CLASS</code> trỏ tới class chính có annotation <code>@SpringBootApplication</code> của bạn.</p>



<h3 id="5-toi-uu-hieu-suat-voi-aws-lambda-snapstart" class="wp-block-heading">5. Tối ưu hiệu suất với AWS Lambda SnapStart</h3>



<p class="wp-block-paragraph">Một trong những thách thức lớn khi chạy Java trên Lambda là <strong>thời gian khởi động (cold start)</strong>. AWS đã giới thiệu <strong>SnapStart</strong> để giải quyết vấn đề này bằng cách “chụp ảnh” trạng thái Lambda sau khi khởi tạo, rồi khôi phục lại cực nhanh cho các request tiếp theo.</p>



<p class="wp-block-paragraph">Để bật SnapStart, chỉ cần thêm cấu hình vào AWS SAM hoặc CloudFormation:</p>



<pre class="wp-block-code"><code>
SnapStart:
  ApplyOn: PublishedVersions
  AutoPublishAlias: prod
  </code></pre>



<p class="wp-block-paragraph">Kết quả là ứng dụng Java có thể khởi động nhanh hơn gấp 5–10 lần, giúp cải thiện đáng kể trải nghiệm người dùng, đặc biệt với các API có tần suất gọi thấp hoặc không liên tục.</p>



<h3 id="6-ket-noi-co-so-du-lieu-hieu-qua-trong-moi-truong-lambda" class="wp-block-heading">6. Kết nối cơ sở dữ liệu hiệu quả trong môi trường Lambda</h3>



<p class="wp-block-paragraph">Khi làm việc với RDS hoặc Aurora, cần lưu ý:</p>



<ul class="wp-block-list">
<li>Dùng connection pool nhỏ (ví dụ HikariCP với 2–5 connection).</li>



<li>Tận dụng cache tầng ứng dụng (Redis, DAX) để giảm truy vấn trực tiếp DB.</li>



<li>Hạn chế query đồng bộ trong <em>hot path</em>; nên dùng async hoặc event-driven khi có thể.</li>
</ul>



<h3 id="7-nhuoc-diem-va-luu-y-khi-trien-khai-java-tren-aws-lambda" class="wp-block-heading">7. Nhược điểm và lưu ý khi triển khai Java trên AWS Lambda</h3>



<p class="wp-block-paragraph">Dù <strong>AWS Serverless Java Container</strong> giúp việc chuyển ứng dụng Java lên Lambda trở nên dễ dàng hơn, developer vẫn cần hiểu rõ một số hạn chế để thiết kế và vận hành hiệu quả hơn.</p>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-table is-style-stripes"><table class="has-fixed-layout"><thead><tr><th>Vấn đề</th><th>Mô tả chi tiết</th><th>Giải pháp / Lưu ý</th></tr></thead><tbody><tr><td>Thời gian khởi động (Cold Start)</td><td>  &#8211; Java cần khởi tạo JVM và load class khi Lambda được gọi lần đầu, có thể mất vài trăm mili-giây tới vài giây.<br><br>  &#8211; Đặc biệt nếu ứng dụng dùng Spring Boot hoặc nhiều dependency.<br></td><td>   &#8211; Dùng <strong>AWS Lambda SnapStart</strong> (Java 11+) để tạo snapshot môi trường khởi tạo.<br><br>  &#8211; Cân nhắc <strong>GraalVM Native Image</strong> cho các hàm nhỏ, khởi động cực nhanh.</td></tr><tr><td>Kích thước file JAR lớn</td><td>  &#8211; Ứng dụng Spring Boot hoặc Jakarta EE thường tạo “fat JAR” có thể trên 50 MB, làm tăng thời gian tải và ảnh hưởng cold start. </td><td>  &#8211; Dùng <strong>Spring Boot Layered JAR</strong> hoặc <strong>spring-boot-thin-launcher</strong>. <br><br>  &#8211; Xem xét đóng gói dưới dạng <strong>container image</strong> để kiểm soát tốt kích thước.<br></td></tr><tr><td>Timeout bị giới hạn</td><td>  &#8211; Lambda chỉ chạy tối đa 15 phút, không phù hợp cho các batch job hoặc xử lý dữ liệu lớn kéo dài. <br><br>  &#8211; Nếu dùng qua API Gateway thì chỉ còn <strong>29s</strong><br></td><td>  &#8211; Chia nhỏ công việc hoặc sử dụng <strong>AWS Step Functions</strong> để quản lý workflow dài.<br><br>&#8211; Sử dụng SQS trong AWS để thực hiện các công việc như import, xử lý data.</td></tr><tr><td>Kết nối cơ sở dữ liệu</td><td>  &#8211; Lambda không duy trì kết nối DB giữa các lần chạy, có thể gây quá tải connection pool hoặc chậm kết nối mới. </td><td>  &#8211; Dùng <strong>RDS Proxy</strong> để giữ kết nối trung gian hoặc giới hạn connection pool nhỏ (2–5 connection). <br><br>Kết hợp caching như <strong>Redis</strong> để giảm truy vấn DB.<br></td></tr><tr><td>Chi phí khi có nhiều hàm nhỏ</td><td>  &#8211; Nếu tách quá nhiều hàm (micro-Lambda), tổng chi phí gọi (invocations) và log có thể tăng, đặc biệt khi dùng API Gateway nhiều lớp. </td><td>  &#8211; Gộp các hàm có logic gần nhau, hoặc dùng <strong>Function URLs</strong> để giảm chi phí API Gateway khi phù hợp.</td></tr><tr><td>Debug và quan sát hệ thống</td><td>  &#8211; Debug Lambda Java khó hơn vì không thể xem log real-time hoặc attach debugger như local Tomcat. </td><td>  &#8211; Dùng <strong>AWS SAM CLI</strong> để test local, kết hợp <strong>CloudWatch Logs</strong>, <strong>X-Ray</strong> và <strong>AWS Lambda Powertools for Java</strong> để logging và tracing hiệu quả.</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Tóm lại, Java vẫn là lựa chọn mạnh mẽ trong môi trường AWS Lambda nhờ tính ổn định và hệ sinh thái lớn, nhưng để đạt hiệu năng tối ưu, cần chú trọng vào cấu trúc ứng dụng, cách đóng gói, và kỹ thuật giảm thời gian khởi động.</p>



<h4 id="tai-nguyen-tham-khao" class="wp-block-heading">Tài nguyên tham khảo</h4>



<ul class="wp-block-list">
<li><a href="https://github.com/aws/serverless-java-container/" target="_blank" rel="noreferrer noopener">GitHub: AWS Serverless Java Container</a></li>



<li><a href="https://docs.aws.amazon.com/lambda/latest/dg/lambda-java.html" target="_blank" rel="noreferrer noopener">Tài liệu chính thức: AWS Lambda cho Java Developer</a></li>



<li><a href="https://aws.amazon.com/blogs/compute/" target="_blank" rel="noreferrer noopener">AWS Compute Blog</a></li>
</ul>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://blog.tomosia.com.vn/re-platforming-java-aws-serverless-java-container/">Re-platforming Java với AWS Serverless Java Container</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/re-platforming-java-aws-serverless-java-container/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
	</channel>
</rss>
