<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Vietnamese Professional - CCNP Automation</title>
		<link>https://www.forum.vnpro.org/</link>
		<description />
		<language>vi</language>
		<lastBuildDate>Sun, 07 Jun 2026 07:39:06 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>images/misc/rss.png</url>
			<title>Vietnamese Professional - CCNP Automation</title>
			<link>https://www.forum.vnpro.org/</link>
		</image>
		<item>
			<title>Kibana</title>
			<link>https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/441204-kibana</link>
			<pubDate>Sat, 06 Jun 2026 08:08:07 GMT</pubDate>
			<description>Distributed Logging: Kiến trúc 5 tầng giúp quan sát hệ thống Microservices hiệu quả 
 
 
Khi hệ thống còn là Monolith, logging thường chỉ đơn giản là...</description>
			<content:encoded><![CDATA[<b>Distributed Logging: Kiến trúc 5 tầng giúp quan sát hệ thống Microservices hiệu quả</b><br />
<br />
<br />
Khi hệ thống còn là Monolith, logging thường chỉ đơn giản là ghi dữ liệu vào file trên máy chủ. Nhưng khi chuyển sang kiến trúc Microservices, Cloud Native và Kubernetes, hàng chục hoặc hàng trăm service có thể tạo ra hàng triệu log mỗi ngày. Lúc này, logging không còn là một tính năng phụ trợ mà đã trở thành một thành phần cốt lõi của tính khả kiến Observability. Một hệ thống Distributed Logging được thiết kế đúng cách thường chia thành 5 giai đoạn chính.<br />
<br />
<b>1. Collection Stage – Thu thập log</b><br />
<br />
<br />
Đây là bước đầu tiên của toàn bộ quy trình. Các Collector Agent được triển khai gần nguồn sinh log nhất, thường nằm trên các máy chủ vật lý, máy ảo, Container, Kubernetes Node. Collector có thể hoạt động theo nhiều cách như theo dõi file log, theo dõi sự thay đổi của file, cung cấp API để ứng dụng gửi log hoặc Subscribe vào các nguồn log. Mục tiêu của giai đoạn này là thu thập dữ liệu càng gần nguồn phát sinh càng tốt.<br />
<br />
<b>2. Forwarding Stage – Chuyển tiếp log</b><br />
<br />
<br />
Sau khi thu thập, log sẽ được gửi đến một Log Aggregator.<br />
Log Aggregator đóng vai trò tập trung dữ liệu từ nhiều nguồn khác nhau như từ Application, từ Database, từ Operating System, Web Server, Event Queue... Đây là bước biến hàng trăm nguồn log phân tán thành một luồng dữ liệu tập trung.<br />
<br />
<b>3. Storage Stage – Lưu trữ log</b><br />
<br />
<br />
Các log sau đó được ghi vào hệ thống lưu trữ. Tùy theo quy mô hệ thống, nơi lưu trữ có thể là Local Storage, Shared Storage, Object Storage, Distributed File System. Tại đây doanh nghiệp thường thiết lập các chính sách Retention Period, Log Rotation, Data Lifecycle, Archiving Policy... Ví dụ các bạn có thể thấy các chính sách như Giữ log vận hành trong 30 ngày, giữ log bảo mật trong 1 năm, chuyển log cũ sang Object Storage giá rẻ....<br />
<br />
<b>4. Indexing Stage – Đánh chỉ mục</b><br />
<br />
<br />
Đây là bước giúp việc tìm kiếm log trở nên thực tế. Thay vì đọc từng file log thủ công, hệ thống sẽ tạo chỉ mục theo Thời gian, Ứng dụng, theo địa chỉ Máy chủ, Mức độ nghiêm trọng, Correlation ID...<br />
Sau khi được đánh chỉ mục, các công cụ như Elasticsearch có thể thực hiện Full Text Search, Analytics, Dashboard, Trend Analysis<br />
trong thời gian gần như tức thì.<br />
<br />
<b>5. Alerting Stage – Cảnh báo</b><br />
<br />
<br />
Đây là tầng thông minh nhất của hệ thống logging. Nó liên tục phân tích log để phát hiện các lỗi bất thường, các tấn công bảo mật, Service bị gián đoạn, tăng đột biến lưu lượng, Không nhận được log từ một máy chủ nào đó. ...Khi phát hiện sự kiện bất thường, hệ thống có thể thực hiện các hành động như Gửi Email, Gửi Slack, Gửi Teams, Tạo Incident Ticket, Kích hoạt Automation Workflow....<br />
<br />
<b>Những Best Practice quan trọng trong Distributed Logging</b><br />
<br />
<b>Chuẩn hóa nền tảng logging</b><br />
<br />
<br />
Trong môi trường Microservices, các nhóm phát triển có thể sử dụng Java, Python, Go, Node.js. Tuy nhiên nền tảng logging nên được thống nhất. Nếu mỗi service sử dụng một giải pháp logging khác nhau, việc quản lý và phân tích log sẽ trở nên cực kỳ phức tạp.<br />
<br />
<b>Sử dụng Correlation ID</b><br />
<br />
<br />
Một giao dịch có thể đi qua:<br />
User → API Gateway → Service A → Service B → Database<br />
Nếu không có Correlation ID, việc truy vết lỗi gần như là ác mộng.<br />
Correlation ID được gắn vào mọi log liên quan đến cùng một request để dễ dàng theo dõi toàn bộ hành trình của giao dịch.<br />
Đây là kỹ thuật gần như bắt buộc trong kiến trúc Microservices hiện đại.<br />
<br />
<b>Không tin tưởng nhiều nguồn thời gian</b><br />
<br />
<br />
Một vấn đề rất hay gặp là lệch giờ giữa các máy chủ.<br />
Ví dụ:<br />
09:01:05 User được cập nhật<br />
09:01:03 User được tạo<br />
Rõ ràng đây là điều vô lý. Để tránh hiện tượng này, toàn bộ hạ tầng cần đồng bộ thời gian bằng NTP, Chrony, Enterprise Time Service<br />
Và tốt nhất nên xem một nguồn thời gian là &quot;nguồn sự thật&quot; duy nhất.<br />
<br />
<b>Luôn giả định hệ thống logging sẽ hỏng</b><br />
<br />
<br />
Đây là tư duy DevOps rất quan trọng. Logging Server cũng là một dịch vụ và hoàn toàn có thể gặp sự cố. Collector Agent nên tự Buffer dữ liệu, Cache cục bộ, Retry khi kết nối phục hồi. Nếu không, bạn sẽ mất chính những log quan trọng nhất vào lúc hệ thống gặp sự cố.<br />
<br />
<b>Ghi log có ngữ cảnh</b><br />
<br />
<br />
Thông báo lỗi kiểu Error occurred gần như vô dụng vì chúng không cung cấp thông tin hữu ích. Một log tốt nên bao gồm:<ul><li>Timestamp</li>
</ul><ul><li>Service Name</li>
</ul><ul><li>Function Name</li>
</ul><ul><li>Correlation ID</li>
</ul><ul><li>Stack Trace</li>
</ul><ul><li>Client IP</li>
</ul><ul><li>User Agent</li>
</ul><ul><li>Error Details</li>
</ul>Thông tin ngữ cảnh càng đầy đủ thì thời gian xử lý sự cố càng giảm.<br />
<br />
<b>Hỗ trợ Query Log</b><br />
<br />
<br />
Giá trị thực sự của logging không nằm ở việc lưu trữ log mà nằm ở khả năng trả lời câu hỏi. Ví dụ:<ul><li>Service nào lỗi nhiều nhất trong giờ cao điểm?</li>
</ul><ul><li>API nào có thời gian phản hồi lâu nhất?</li>
</ul><ul><li>Người dùng từ quốc gia nào tạo nhiều lỗi nhất?</li>
</ul><ul><li>Sau khi deploy phiên bản mới thì tỷ lệ lỗi thay đổi ra sao?</li>
</ul>Muốn trả lời được các câu hỏi này, hệ thống phải hỗ trợ truy vấn dữ liệu hiệu quả.<br />
<br />
<b>ELK Stack – Bộ công cụ phổ biến nhất cho Distributed Logging</b><br />
<br />
<br />
Một trong những giải pháp được sử dụng rộng rãi nhất hiện nay là ELK Stack. ELK bao gồm ba thành phần chính:<br />
<b>Elasticsearch</b><br />
Là công cụ lưu trữ, tìm kiếm và phân tích dữ liệu dựa trên Apache Lucene. Khả năng Full Text Search cực kỳ mạnh mẽ giúp truy vấn hàng tỷ bản ghi log.<br />
<b>Logstash</b><br />
Là tầng thu thập và xử lý log. Logstash nhận dữ liệu từ nhiều nguồn, chuyển đổi định dạng và chuyển tiếp đến hệ thống lưu trữ.<br />
<b>Kibana</b><br />
Là giao diện trực quan hóa. Kibana cho phép Xây dựng Dashboard, Theo dõi thời gian thực, Điều tra sự cố, Phân tích xu hướng.<br />
Ngoài ra ELK còn sử dụng các Collector Agent gọi là <b>Beats</b>.<br />
Phổ biến nhất gồm:<ul><li>Filebeat: Thu thập log file</li>
</ul><ul><li>Metricbeat: Thu thập CPU, Memory, Disk, Process</li>
</ul><ul><li>Packetbeat: Thu thập lưu lượng mạng</li>
</ul><ul><li>Auditbeat: Thu thập sự kiện bảo mật</li>
</ul>Luồng xử lý thường là:<br />
Application<br />
↓<br />
Beats<br />
↓<br />
Logstash<br />
↓<br />
Elasticsearch<br />
↓<br />
Kibana<br />
<br />
<b>Góc nhìn DevOps</b><br />
<br />
<br />
Nếu phải chọn một thuộc tính quan trọng nhất của Distributed Logging, câu trả lời không phải là định dạng dữ liệu, tính toàn vẹn dữ liệu hay khả năng tìm kiếm. Đó là <b>Data Aggregation</b>.<br />
Bởi vì giá trị lớn nhất của Distributed Logging là đưa toàn bộ log từ hàng trăm hệ thống khác nhau về một nơi duy nhất. Chỉ khi dữ liệu được tập trung, chúng ta mới có thể thực hiện tìm kiếm, phân tích, cảnh báo và điều tra sự cố một cách hiệu quả.<br />
Đây cũng chính là lý do mà trong các nền tảng DevOps, SRE, AIOps và DevSecOps hiện đại, hệ thống Logging luôn được xem là một phần không thể thiếu của nền tảng Observability.​]]></content:encoded>
			<category domain="https://www.forum.vnpro.org/forum/ccnp-enterprise/automation">CCNP Automation</category>
			<dc:creator>dangquangminh</dc:creator>
			<guid isPermaLink="true">https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/441204-kibana</guid>
		</item>
		<item>
			<title>Broker Topology</title>
			<link>https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/440942-broker-topology</link>
			<pubDate>Mon, 01 Jun 2026 11:08:24 GMT</pubDate>
			<description><![CDATA[Broker Topology trong Event-Driven Architecture: Khi hệ thống không cần &quot;nhạc trưởng&quot; 
 
 
Trong các bài trước, chúng ta đã tìm hiểu Mediator...]]></description>
			<content:encoded><![CDATA[<b>Broker Topology trong Event-Driven Architecture: Khi hệ thống không cần &quot;nhạc trưởng&quot;</b><br />
<br />
<br />
Trong các bài trước, chúng ta đã tìm hiểu <b>Mediator Topology</b>, nơi mọi luồng xử lý đều được điều phối bởi một thành phần trung tâm (Event Mediator). Tuy nhiên, không phải hệ thống Event-Driven nào cũng cần một &quot;nhạc trưởng&quot;.<br />
<br />
Đó là lúc <b>Broker Topology</b> phát huy tác dụng.<br />
<br />
Broker Topology khác với Mediator Topology ở chỗ <b>không tồn tại một thành phần trung tâm chịu trách nhiệm điều phối toàn bộ quy trình xử lý</b>. Thay vào đó, các sự kiện (events) tự nhiên nối tiếp nhau thông qua một <b>Message Broker</b>, thường được triển khai dưới dạng Message Queue như Kafka, RabbitMQ, NATS hoặc ActiveMQ.<br />
<br />
Khi một sự kiện xuất hiện, nó được gửi vào broker. Một event processor phù hợp sẽ nhận sự kiện đó, thực hiện phần công việc của mình rồi phát sinh một sự kiện mới. Sự kiện mới tiếp tục được broker chuyển cho processor tiếp theo. Quá trình này tạo thành một chuỗi xử lý liên tục cho đến khi hoàn thành nghiệp vụ.<br />
<br />
Điểm quan trọng là sau khi xử lý xong một event, processor không còn tham gia vào quy trình đó nữa. Nó chỉ biết công việc của mình và không cần biết toàn bộ luồng nghiệp vụ phía sau.<br />
<br />
Một ví dụ dễ hình dung là <b>chạy tiếp sức (relay race)</b>.<br />
<br />
Mỗi vận động viên chỉ chạy một đoạn đường của mình rồi chuyền gậy cho người kế tiếp. Không ai cần biết toàn bộ cuộc đua diễn ra như thế nào, họ chỉ cần hoàn thành phần việc được giao. Trong Broker Topology, &quot;cây gậy tiếp sức&quot; chính là event.<br />
<br />
Ví dụ trong quy trình triển khai máy ảo (VM Provisioning):<ul><li>Event &quot;VM Requested&quot; được gửi vào broker.</li>
<li>Resource Allocation Processor nhận event và cấp phát tài nguyên.</li>
<li>Sau khi hoàn thành, processor phát sinh event &quot;VM Resources Allocated&quot;.</li>
<li>Broker chuyển event này cho IPAM Processor.</li>
<li>IPAM Processor cấp phát địa chỉ IP và phát sinh event &quot;IP Address Reserved&quot;.</li>
<li>Event tiếp tục được chuyển đến các processor khác để triển khai VM, cấu hình hệ điều hành và hoàn tất hệ thống.</li>
</ul><br />
Toàn bộ quy trình diễn ra mà không cần một bộ điều phối trung tâm.<br />
<br />
Đây là mô hình rất phổ biến trong các hệ thống:<ul><li>Microservices</li>
<li>Cloud-native applications</li>
<li>Kubernetes Operators</li>
<li>CI/CD Pipelines</li>
<li>Infrastructure Automation</li>
<li>Large-scale Event Streaming Platforms</li>
</ul><br />
Ưu điểm lớn nhất của Broker Topology là khả năng <b>mở rộng độc lập, giảm sự phụ thuộc giữa các dịch vụ (loose coupling) và tăng khả năng chịu lỗi của hệ thống</b>. Tuy nhiên, đổi lại việc theo dõi luồng xử lý và troubleshooting sẽ phức tạp hơn vì không có thành phần nào nắm toàn bộ workflow. <b>Ôn tập nhanh</b><br />
<br />
<br />
<b>Vai trò của Event Channel trong Event-Driven Architecture là gì?</b><br />
<br />
Đáp án đúng:<br />
<br />
<b>a. Phân phối sự kiện từ Event Emitters đến Event Consumers</b><br />
<br />
Event Channel đóng vai trò là &quot;đường dẫn giao thông&quot; giúp các sự kiện được truyền từ nơi phát sinh (Producer/Emitter) đến nơi xử lý (Consumer/Processor), tạo nên nền tảng cho toàn bộ kiến trúc Event-Driven hoạt động hiệu quả.<br />
<br />
Trong thế giới DevOps, Automation và Cloud-Native ngày nay, hiểu rõ sự khác biệt giữa <b>Mediator Topology</b> và <b>Broker Topology</b> là bước đầu tiên để thiết kế các hệ thống phân tán có khả năng mở rộng và tự động hóa ở quy mô lớn.<br />
​]]></content:encoded>
			<category domain="https://www.forum.vnpro.org/forum/ccnp-enterprise/automation">CCNP Automation</category>
			<dc:creator>dangquangminh</dc:creator>
			<guid isPermaLink="true">https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/440942-broker-topology</guid>
		</item>
		<item>
			<title>Mediator Topology</title>
			<link>https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/440907-mediator-topology</link>
			<pubDate>Sun, 31 May 2026 03:38:23 GMT</pubDate>
			<description><![CDATA[Khi Event-Driven Architecture cần một &quot;nhạc trưởng&quot;: Mediator Topology 
 
 
Trong nhiều hệ thống tự động hóa hiện đại, không phải mọi sự kiện đều đơn...]]></description>
			<content:encoded><![CDATA[<b>Khi Event-Driven Architecture cần một &quot;nhạc trưởng&quot;: Mediator Topology</b><br />
<br />
<br />
Trong nhiều hệ thống tự động hóa hiện đại, không phải mọi sự kiện đều đơn giản đến mức chỉ cần nhận sự kiện rồi xử lý ngay. Có những quy trình gồm nhiều bước, có bước chạy song song, có bước phải chờ bước khác hoàn thành. Đây là lúc <b>Mediator Topology</b> phát huy tác dụng.<br />
<br />
Hãy lấy ví dụ quen thuộc trong DevOps và Cloud Automation: <b>triển khai một máy ảo (VM) mới</b>. Quy trình này thường bao gồm nhiều bước như cấp phát tài nguyên, đặt trước địa chỉ IP, tạo máy ảo và cấu hình hệ điều hành. Một số bước có thể thực hiện đồng thời, trong khi một số bước bắt buộc phải thực hiện theo thứ tự. Chẳng hạn, không thể cấu hình hệ điều hành nếu máy ảo chưa được tạo xong.<br />
<br />
Trong kiến trúc Mediator Topology, có bốn thành phần chính:<br />
<br />
<b>Event Queue</b> là nơi tiếp nhận các sự kiện ban đầu (initial events). Đây thường là message queue hoặc hệ thống hàng đợi sự kiện.<br />
<br />
<b>Event Mediator</b> đóng vai trò trung tâm điều phối. Thành phần này không trực tiếp xử lý nghiệp vụ mà chỉ biết quy trình cần thực hiện gồm những bước nào, bước nào chạy song song và bước nào phải chờ.<br />
<br />
<b>Event Channel</b> là các kênh truyền tải sự kiện xử lý (processing events) từ Mediator đến các bộ xử lý tương ứng. Chúng thường được triển khai bằng message queue hoặc event stream.<br />
<br />
<b>Event Processor</b> là các thành phần thực hiện nghiệp vụ cụ thể. Mỗi processor nên độc lập, tự chứa (self-contained), liên kết lỏng lẻo (loosely coupled) và chỉ đảm nhiệm một nhiệm vụ duy nhất.<br />
<br />
Điểm quan trọng của mô hình này là sự phân biệt giữa:<ul><li><b>Initial Event</b>: sự kiện khởi đầu quy trình.</li>
<li><b>Processing Event</b>: các sự kiện trung gian được Mediator tạo ra để điều phối các bước xử lý.</li>
</ul><br />
Quay lại ví dụ triển khai VM.<br />
<br />
Hệ thống nhận được sự kiện <b>&quot;VM Requested&quot;</b>. Event Queue chuyển sự kiện này đến Event Mediator. Mediator biết rằng trước tiên cần cấp phát tài nguyên và đặt trước địa chỉ IP. Do đó nó gửi đồng thời hai processing events đến:<ul><li>VM Resource Allocation Processor</li>
<li>IPAM Processor</li>
</ul><br />
Hai processor này hoạt động song song để thực hiện việc đặt trước tài nguyên và địa chỉ IP.<br />
<br />
Khi nhận được các phản hồi như:<ul><li>&quot;VM Resources Allocated&quot;</li>
<li>&quot;IP Address Reserved&quot;</li>
</ul><br />
Mediator biết rằng các điều kiện tiên quyết đã hoàn tất và tiếp tục gửi sự kiện đến VM Provisioning Processor để tạo máy ảo.<br />
<br />
Sau khi nhận phản hồi <b>&quot;VM Provisioned&quot;</b>, Mediator mới kích hoạt bước cuối cùng là cấu hình hệ điều hành.<br />
<br />
Quá trình tiếp tục cho đến khi toàn bộ workflow hoàn thành.<br />
<br />
Điểm mạnh lớn nhất của Mediator Topology là khả năng <b>orchestration</b>. Thay vì để các service tự gọi lẫn nhau tạo thành một mạng lưới phụ thuộc phức tạp, toàn bộ luồng xử lý được điều phối tập trung bởi Mediator. Điều này giúp dễ quản lý workflow, theo dõi trạng thái xử lý và xây dựng các quy trình tự động hóa phức tạp trong Cloud, DevOps, Infrastructure Automation hay IT Service Provisioning.<br />
<br />
Nếu Broker Topology giống như một hệ thống phát thanh nơi các thành phần tự lắng nghe và phản ứng với sự kiện, thì <b>Mediator Topology giống như một dàn nhạc có nhạc trưởng</b>, nơi mọi hoạt động đều được điều phối theo một kịch bản đã định trước.<br />
<br />
Đây cũng là nền tảng kiến trúc xuất hiện rất nhiều trong các công cụ Workflow Engine hiện đại như Camunda, Temporal, Netflix Conductor, AWS Step Functions và nhiều nền tảng Orchestration trong môi trường Cloud Native.<br />
​]]></content:encoded>
			<category domain="https://www.forum.vnpro.org/forum/ccnp-enterprise/automation">CCNP Automation</category>
			<dc:creator>dangquangminh</dc:creator>
			<guid isPermaLink="true">https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/440907-mediator-topology</guid>
		</item>
		<item>
			<title>Xây dựng DashBoard dùng REST API</title>
			<link>https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/440881-xây-dựng-dashboard-dùng-rest-api</link>
			<pubDate>Fri, 29 May 2026 22:31:31 GMT</pubDate>
			<description>Tự Xây Dựng Dashboard Riêng Cho Doanh Nghiệp: Tại Sao DevOps Và Automation Engineer Cần Hiểu REST API? 
 
 
Rất nhiều hệ thống hiện đại như Cisco DNA...</description>
			<content:encoded><![CDATA[<b>Tự Xây Dựng Dashboard Riêng Cho Doanh Nghiệp: Tại Sao DevOps Và Automation Engineer Cần Hiểu REST API?</b><br />
<br />
<br />
Rất nhiều hệ thống hiện đại như Cisco DNA Center, Kubernetes, GitLab, Jenkins, ServiceNow, VMware, Intersight hay các nền tảng Cloud đều cung cấp sẵn giao diện quản trị (dashboard) rất đẹp.<br />
<br />
Nhưng thực tế doanh nghiệp thường không muốn nhân viên phải đăng nhập vào 5–10 hệ thống khác nhau chỉ để xem trạng thái hạ tầng.<br />
<br />
Giải pháp phổ biến hiện nay là xây dựng <b>Custom Dashboard</b> – một bảng điều khiển riêng tập hợp dữ liệu từ nhiều hệ thống khác nhau thông qua API.<br />
<br />
Đây cũng là lý do vì sao REST API trở thành một trong những kỹ năng quan trọng nhất đối với DevOps Engineer, Platform Engineer, Cloud Engineer và Network Automation Engineer. <hr /> <b>Dashboard và Back-End Giao Tiếp Với Nhau Như Thế Nào?</b><br />
<br />
<br />
Trong kiến trúc ứng dụng hiện đại, phần giao diện người dùng (Front-End) thường không truy cập trực tiếp vào cơ sở dữ liệu.<br />
<br />
Thay vào đó, Front-End gửi yêu cầu đến Back-End thông qua API.<br />
<br />
Mô hình đơn giản:<br />
<br />
Frontend Dashboard → REST API → Backend Service → Database<br />
<br />
Khi người dùng nhấn vào một đối tượng trên giao diện, Dashboard sẽ gửi yêu cầu API đến hệ thống phía sau để lấy dữ liệu hoặc cập nhật trạng thái. <hr /> <b>REST API Là Gì?</b><br />
<br />
<br />
REST (Representational State Transfer) là một phương pháp xây dựng API trên nền giao thức HTTP/HTTPS giúp các thành phần ứng dụng giao tiếp với nhau.<br />
<br />
REST trở thành tiêu chuẩn thực tế cho các ứng dụng web nhờ các ưu điểm:<ul><li>Nhẹ (Lightweight)</li>
<li>Dễ triển khai</li>
<li>Không phụ thuộc nền tảng</li>
<li>Khả năng mở rộng cao</li>
<li>Hỗ trợ hầu hết ngôn ngữ lập trình</li>
</ul><br />
Bất kỳ thiết bị nào có khả năng gửi HTTP Request đều có thể sử dụng REST API:<ul><li>Linux</li>
<li>Windows</li>
<li>macOS</li>
<li>Smartphone</li>
<li>Tablet</li>
<li>Thiết bị IoT</li>
</ul><hr /> <b>Các Phương Thức REST API Quan Trọng</b><br />
<br />
<br />
REST sử dụng mô hình Request – Response của HTTP.<br />
<br />
Các phương thức phổ biến gồm:<br />
<br />
<b>GET</b><br />
<br />
Dùng để đọc dữ liệu.<br />
<br />
Ví dụ:<br />
GET /users/32<br />
<br />
Truy vấn thông tin người dùng có ID là 32. <hr /><br />
<b>POST</b><br />
<br />
Tạo dữ liệu mới.<br />
<br />
Ví dụ:<br />
POST /users<br />
<br />
Tạo một người dùng mới. <hr /><br />
<b>PUT</b><br />
<br />
Cập nhật toàn bộ đối tượng.<br />
<br />
Ví dụ:<br />
PUT /users/32 <hr /><br />
<b>PATCH</b><br />
<br />
Cập nhật một phần đối tượng.<br />
<br />
Ví dụ:<br />
PATCH /users/32 <hr /><br />
<b>DELETE</b><br />
<br />
Xóa dữ liệu.<br />
<br />
Ví dụ:<br />
DELETE /users/32 <hr /> <b>Dữ Liệu Được Trao Đổi Như Thế Nào?</b><br />
<br />
<br />
Phần lớn REST API hiện nay sử dụng JSON.<br />
<br />
Ví dụ phản hồi từ API:<br />
{<br />
&quot;id&quot;: 32,<br />
&quot;name&quot;: &quot;John Doe&quot;,<br />
&quot;email&quot;: &quot;john@example.com&quot;<br />
}<br />
<br />
Front-End chỉ cần đọc dữ liệu JSON và hiển thị lên màn hình.<br />
<br />
Ngược lại, khi người dùng nhập dữ liệu trên giao diện, Dashboard sẽ đóng gói dữ liệu thành JSON rồi gửi lại Back-End bằng POST, PUT hoặc PATCH. <hr /> <b>Khi Doanh Nghiệp Muốn Tạo Dashboard Riêng</b><br />
<br />
<br />
Đây là tình huống rất phổ biến.<br />
<br />
Ví dụ doanh nghiệp đang sử dụng:<ul><li>Cisco DNA Center</li>
<li>VMware</li>
<li>ServiceNow</li>
<li>GitLab</li>
<li>Jenkins</li>
</ul><br />
Mỗi hệ thống đều có dashboard riêng.<br />
<br />
Nhưng ban lãnh đạo muốn một màn hình duy nhất để theo dõi:<ul><li>Tình trạng mạng</li>
<li>Trạng thái CI/CD</li>
<li>Ticket sự cố</li>
<li>Tài nguyên Cloud</li>
<li>Hiệu năng ứng dụng</li>
</ul><br />
Lúc này đội DevOps sẽ xây dựng một Dashboard riêng và tích hợp với các hệ thống thông qua API.<br />
<br />
Mô hình này thường được gọi là:<br />
<br />
<b>Single Pane of Glass</b><br />
<br />
Tức là một màn hình duy nhất để quan sát toàn bộ hệ thống. <hr /> <b>Ví Dụ Thực Tế Với Cisco DNA Center</b><br />
<br />
<br />
Cisco DNA Center cung cấp Dashboard quản lý mạng doanh nghiệp tập trung.<br />
<br />
Nền tảng này hỗ trợ:<ul><li>Thiết kế mạng</li>
<li>Provisioning</li>
<li>Policy</li>
<li>Monitoring</li>
<li>Assurance</li>
<li>Automation</li>
</ul><br />
Điều thú vị là dashboard mặc định của DNA Center cũng đang sử dụng chính API của hệ thống để lấy dữ liệu hiển thị.<br />
<br />
Do đó nếu muốn tạo dashboard riêng, chúng ta chỉ cần gọi lại các API tương tự. <hr /> <b>Northbound API Và Intent API</b><br />
<br />
<br />
Trong các hệ thống quản lý mạng hiện đại thường có hai hướng API:<br />
<br />
<b>Southbound API</b><br />
<br />
Giao tiếp xuống thiết bị.<br />
<br />
Ví dụ:<ul><li>NETCONF</li>
<li>RESTCONF</li>
<li>gNMI</li>
<li>SNMP</li>
</ul><hr /><br />
<b>Northbound API</b><br />
<br />
Cho phép ứng dụng bên ngoài truy cập vào hệ thống.<br />
<br />
Trên Cisco DNA Center, Northbound API được gọi là:<br />
<br />
<b>Intent API</b><br />
<br />
Intent API cung cấp khả năng điều khiển mạng ở mức mục tiêu kinh doanh (business intent) thay vì phải thao tác trực tiếp trên từng thiết bị.<br />
<br />
API này sử dụng:<ul><li>HTTPS</li>
<li>JSON</li>
<li>GET</li>
<li>POST</li>
<li>PUT</li>
<li>DELETE</li>
</ul><hr /> <b>Xác Thực API Bằng Token</b><br />
<br />
<br />
Hầu hết hệ thống hiện nay đều yêu cầu xác thực.<br />
<br />
Cisco DNA Center sử dụng cơ chế Access Token.<br />
<br />
Bước đầu tiên là lấy token:<br />
POST /dna/system/api/v1/auth/token<br />
<br />
Kèm theo:<ul><li>Username</li>
<li>Password</li>
</ul><br />
Nếu thành công hệ thống trả về:<br />
{<br />
&quot;Token&quot;: &quot;eyJ0eXA...&quot;<br />
}<br />
<br />
Sau đó token được sử dụng trong header:<br />
X-Auth-Token: eyJ0eXA...<br />
<br />
cho các API tiếp theo.<br />
<br />
Đây là mô hình rất phổ biến hiện nay và cũng xuất hiện trên:<ul><li>Kubernetes</li>
<li>GitLab</li>
<li>ServiceNow</li>
<li>HashiCorp Vault</li>
<li>Cisco Intersight</li>
<li>Public Cloud APIs</li>
</ul><hr /> <b>Lấy Inventory Thiết Bị Từ DNA Center</b><br />
<br />
<br />
Ví dụ lấy danh sách thiết bị:<br />
GET /dna/intent/api/v1/network-device<br />
<br />
Kết quả trả về là JSON chứa:<ul><li>Hostname</li>
<li>Model</li>
<li>Serial Number</li>
<li>Software Version</li>
<li>Role</li>
<li>MAC Address</li>
<li>Uptime</li>
</ul><br />
Ví dụ:<br />
{<br />
&quot;hostname&quot;: &quot;cat_9k_1&quot;,<br />
&quot;type&quot;: &quot;Cisco Catalyst 9300&quot;,<br />
&quot;role&quot;: &quot;ACCESS&quot;,<br />
&quot;softwareVersion&quot;: &quot;16.12&quot;<br />
}<br />
<br />
Dashboard có thể đọc JSON này và hiển thị dưới dạng:<ul><li>Bảng thống kê</li>
<li>Biểu đồ</li>
<li>Topology</li>
<li>Bản đồ mạng</li>
</ul><hr /> <b>Tích Hợp API Bằng Python</b><br />
<br />
<br />
Trong thế giới Automation, Python gần như là lựa chọn mặc định.<br />
<br />
Ví dụ lấy token:<br />
import requests<br />
<br />
r = requests.post(<br />
'https://dnac/dna/system/api/v1/auth/token',<br />
auth=('username', 'password')<br />
)<br />
<br />
token = r.json()['Token']<br />
<br />
Sau đó gọi API:<br />
headers = {<br />
'X-Auth-Token': token<br />
}<br />
<br />
r = requests.get(<br />
'https://dnac/dna/intent/api/v1/site-health',<br />
headers=headers<br />
)<br />
<br />
Kết quả JSON có thể được:<ul><li>Lưu vào Database</li>
<li>Đẩy vào Dashboard</li>
<li>Gửi sang Grafana</li>
<li>Phân tích bằng AI Agent</li>
<li>Tạo báo cáo tự động</li>
</ul><hr /> <b>REST Không Phải Là Lựa Chọn Duy Nhất</b><br />
<br />
<br />
Ngoài REST còn nhiều công nghệ khác:<ul><li>gRPC</li>
<li>SOAP</li>
<li>CORBA</li>
<li>RPC Frameworks</li>
</ul><br />
Tuy nhiên REST hiện vẫn là giao diện phổ biến nhất trong các hệ thống Cloud, DevOps và Network Automation. <hr /> <b>Điều Mà Automation Engineer Nên Nhận Ra</b><br />
<br />
<br />
Nhiều người nghĩ Automation chỉ là viết script cấu hình thiết bị.<br />
<br />
Thực tế phần lớn công việc Automation hiện nay là:<ul><li>Tích hợp hệ thống</li>
<li>Kết nối API</li>
<li>Thu thập dữ liệu</li>
<li>Chuẩn hóa dữ liệu</li>
<li>Xây dựng Dashboard</li>
<li>Tự động hóa quy trình vận hành</li>
</ul><br />
Nếu xem Infrastructure as Code là bước đầu tiên của tự động hóa, thì <b>API Integration chính là bước tiếp theo để xây dựng Platform Engineering và AIOps</b>.<br />
<br />
Hầu hết các nền tảng hiện đại như Kubernetes, Cisco Catalyst Center (DNA Center), Intersight, GitLab, Jenkins, ServiceNow hay Public Cloud đều xoay quanh API. Người hiểu API sẽ có khả năng kết nối các hệ thống này thành một nền tảng thống nhất, thay vì quản trị từng sản phẩm riêng lẻ.<br />
<br />
Nguồn tham khảo: Cisco DevNet ENAUTO, Cisco DNA Center Intent API Documentation.<br />
​]]></content:encoded>
			<category domain="https://www.forum.vnpro.org/forum/ccnp-enterprise/automation">CCNP Automation</category>
			<dc:creator>dangquangminh</dc:creator>
			<guid isPermaLink="true">https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/440881-xây-dựng-dashboard-dùng-rest-api</guid>
		</item>
		<item>
			<title>WebHook</title>
			<link>https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/440712-webhook</link>
			<pubDate>Tue, 26 May 2026 11:56:45 GMT</pubDate>
			<description>Webhook là một khái niệm cực kỳ quan trọng khi bước vào thế giới automation, DevOps, NetDevOps hay tích hợp hệ thống. Nếu API truyền thống giống như...</description>
			<content:encoded><![CDATA[Webhook là một khái niệm cực kỳ quan trọng khi bước vào thế giới automation, DevOps, NetDevOps hay tích hợp hệ thống. Nếu API truyền thống giống như việc bạn phải liên tục hỏi “Có gì mới chưa?” thì webhook là cách hệ thống chủ động nói với bạn “Có sự kiện mới đây!”.<br />
<br />
Webhook hoạt động theo mô hình <b>push</b>, tức là server sẽ tự động gửi dữ liệu đến một endpoint đã được cấu hình sẵn mỗi khi có sự kiện xảy ra. Không cần polling liên tục, không cần viết script cứ vài giây gọi API kiểm tra trạng thái. Đây là lý do webhook được dùng rất nhiều trong monitoring, CI/CD, incident response, ChatOps và network automation.<br />
<br />
Trong ví dụ từ <b>Cisco Catalyst Center</b>, webhook được dùng để phát hành (publish) các event notification như BGP Down, interface flap, unreachable device, assurance alerts… Khi có sự cố mạng, Catalyst Center sẽ đóng vai trò event producer, đóng gói dữ liệu dưới dạng JSON payload rồi gửi đến endpoint receiver của bạn thông qua HTTP <b>POST</b> hoặc đôi khi <b>PUT</b>.<br />
<br />
Quy trình triển khai khá đơn giản. Trước tiên tạo một webhook destination trong Catalyst Center bằng cách khai báo tên, mô tả, URL của webhook receiver, chọn trust certificate nếu dùng HTTPS, chọn phương thức HTTP (thường là POST), cấu hình authentication nếu cần như Basic Auth hoặc token-based auth, rồi lưu lại.<br />
<br />
Sau đó vào phần <b>Event Notifications / Event Catalog</b>, chọn sự kiện muốn subscribe, ví dụ <b>Network Device Interface Connectivity - BGP Down</b>, rồi dùng chức năng <b>Try-It-Now</b> để phát sinh test event. Catalyst Center sẽ gửi payload thử nghiệm đến tất cả destination đã subscribe.<br />
<br />
Một điểm quan trọng là payload test có thể khác payload thật trong production. Vì vậy khi viết webhook receiver, đừng chỉ test với mock JSON đơn giản mà nên kiểm tra với event thực tế.<br />
<br />
Ví dụ receiver có thể là:<ul><li>Flask app</li>
<li>FastAPI service</li>
<li>Node.js Express endpoint</li>
<li>SIEM collector</li>
<li>Splunk HEC</li>
<li>ServiceNow</li>
<li>PagerDuty</li>
<li>Slack automation bot</li>
</ul><br />
Ví dụ luồng automation thực tế:<br />
<br />
<b>BGP Down → Catalyst Center phát webhook → Flask receiver nhận JSON → Python script parse event → gọi API tạo ticket ServiceNow → gửi cảnh báo Teams/Slack → trigger remediation playbook Ansible</b><br />
<br />
Đây chính là nền tảng của <b>event-driven automation</b>.<br />
<br />
Polling là mô hình “Are we there yet?”<br />
Webhook là mô hình “I’ll call you when something happens.”<br />
<br />
Với DevOps và NetDevOps, webhook không chỉ là notification mechanism. Nó là cầu nối để biến hạ tầng từ reactive sang autonomous automation.​]]></content:encoded>
			<category domain="https://www.forum.vnpro.org/forum/ccnp-enterprise/automation">CCNP Automation</category>
			<dc:creator>dangquangminh</dc:creator>
			<guid isPermaLink="true">https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/440712-webhook</guid>
		</item>
		<item>
			<title>Event Notification Framework</title>
			<link>https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/440638-event-notification-framework</link>
			<pubDate>Sun, 24 May 2026 14:14:37 GMT</pubDate>
			<description>Event Notifications Framework – “Hệ thần kinh cảnh báo” của Network Automation hiện đại 
 
Khi mạng ngày càng được tự động hóa, câu hỏi không còn là...</description>
			<content:encoded><![CDATA[<b>Event Notifications Framework – “Hệ thần kinh cảnh báo” của Network Automation hiện đại</b><br />
<br />
Khi mạng ngày càng được tự động hóa, câu hỏi không còn là <i>“thiết bị có sự cố không?”</i> mà là <i>“sự cố đó được đẩy đến đúng hệ thống, đúng người, đúng workflow chưa?”</i> Đây chính là vai trò của <b>Event Notifications Framework</b>.<br />
<br />
Nhìn vào sơ đồ, ta thấy đây là một pipeline xử lý sự kiện khá điển hình trong các nền tảng quản trị mạng hiện đại như Cisco Catalyst Center.<br />
<br />
Bắt đầu từ <b>Network Infrastructure</b> – gồm switching, routing, wireless – cùng với chính hệ thống quản lý (<b>Catalyst Center System</b>) liên tục sinh ra các event. Event có thể đến từ nhiều nguồn: thiết bị switch bị down, AP mất kết nối, CPU tăng cao, automation workflow fail, hoặc hệ thống assurance phát hiện trải nghiệm người dùng suy giảm.<br />
<br />
Các event này đi vào <b>Event Management System</b>, nơi đóng vai trò như bộ não trung tâm. Tại đây có <b>Event Catalog</b> để định nghĩa các loại sự kiện, <b>Subscription</b> để quyết định ai sẽ nhận thông báo nào, và <b>Runtime Dashboard</b> để quan sát trạng thái theo thời gian thực.<br />
<br />
Sau đó là lớp <b>Notification Method</b> – tức kênh phân phối cảnh báo. Không chỉ email truyền thống, framework hỗ trợ webhook (rất quan trọng cho automation), SNMP, syslog, Webex notifications, tích hợp với <b>ServiceNow</b> để tạo incident ticket, hoặc <b>PagerDuty</b> để đánh thức đội on-call lúc nửa đêm.<br />
<br />
Điểm thú vị là mô hình này phục vụ trực tiếp cho business use case: <b>NOC monitoring, ITSM workflow, dashboard analytics, managed services, centralized logging</b>.<br />
<br />
Ghi chú cuối slide rất thực tế: đây là <b>2 bước</b>:<ul><li>Cấu hình <b>destination</b> (nơi nhận cảnh báo)</li>
<li>Sau đó <b>subscribe</b> vào các event cần theo dõi</li>
</ul><br />
Đây chính là nền tảng để biến monitoring thụ động thành <b>event-driven automation</b> trong NetDevOps/AIOps.<br />
​]]></content:encoded>
			<category domain="https://www.forum.vnpro.org/forum/ccnp-enterprise/automation">CCNP Automation</category>
			<dc:creator>dangquangminh</dc:creator>
			<guid isPermaLink="true">https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/440638-event-notification-framework</guid>
		</item>
		<item>
			<title>Các giao diện lập trình</title>
			<link>https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/440495-các-giao-diện-lập-trình</link>
			<pubDate>Wed, 20 May 2026 11:16:44 GMT</pubDate>
			<description>Programmable Interfaces trong Network Automation: Khi CLI không còn là con đường duy nhất 
 
 
Nhiều kỹ sư mạng bắt đầu sự nghiệp với CLI. Gõ lệnh,...</description>
			<content:encoded><![CDATA[<b>Programmable Interfaces trong Network Automation: Khi CLI không còn là con đường duy nhất</b><br />
<br />
<br />
Nhiều kỹ sư mạng bắt đầu sự nghiệp với CLI. Gõ lệnh, show output, copy-paste config. Trong nhiều năm, đó là cách vận hành mạng tiêu chuẩn.<br />
<br />
Nhưng khi hạ tầng tăng lên hàng trăm hoặc hàng ngàn thiết bị, cloud-native architecture xuất hiện, telemetry real-time trở thành yêu cầu bắt buộc, thì CLI bắt đầu bộc lộ giới hạn.<br />
<br />
Đây là lúc <b>programmable interfaces</b> bước vào cuộc chơi.<br />
<br />
Hình trên mô tả khá rõ sự chuyển dịch từ mô hình quản trị mạng truyền thống sang <b>model-driven programmability</b>. <hr /> <b>CLI chỉ là một interface, không phải toàn bộ hệ thống</b><br />
<br />
<br />
Trên thiết bị Cisco IOS XE, chúng ta quen với:<ul><li>CLI</li>
<li>SNMP</li>
<li>WebUI</li>
</ul><br />
Đây đều là những cách để tương tác với thiết bị.<br />
<br />
Nhưng Cisco bổ sung thêm một lớp interface hiện đại hơn:<ul><li><b>NETCONF</b></li>
<li><b>RESTCONF</b></li>
<li><b>gNMI</b></li>
</ul><br />
Điểm quan trọng:<br />
<br />
Các giao diện này <b>không thay thế hoàn toàn CLI</b>, mà cung cấp <b>additional methods</b> để truy cập cùng một hệ thống dữ liệu cấu hình và operational state.<br />
<br />
Hiểu đơn giản:<br />
<br />
CLI là dành cho con người.<br />
<br />
Programmable APIs là dành cho automation systems.<br />
<br />
Ví dụ:<br />
<br />
Con người:<br />
show ip interface brief<br />
<br />
Automation:<br />
GET /restconf/data/ietf-interfaces:interfaces<br />
<br />
Cùng mục tiêu.<br />
<br />
Khác cách truy cập. <hr /> <b>Vấn đề lớn của CLI trong automation</b><br />
<br />
<br />
CLI hoạt động tốt cho tác vụ thủ công.<br />
<br />
Nhưng automation thì khác.<br />
<br />
CLI có nhiều hạn chế: <b>1. Output không có cấu trúc</b><br />
<br />
<br />
CLI trả về text.<br />
<br />
Ví dụ:<br />
GigabitEthernet1 up up<br />
GigabitEthernet2 administratively down<br />
<br />
Automation script phải parse text.<br />
<br />
Regex.<br />
String matching.<br />
Fragile logic.<br />
<br />
Chỉ cần firmware upgrade làm thay đổi output formatting là script hỏng. <hr /> <b>2. Không có schema chuẩn</b><br />
<br />
<br />
CLI không định nghĩa rõ:<ul><li>field nào tồn tại</li>
<li>kiểu dữ liệu là gì</li>
<li>đâu là config</li>
<li>đâu là operational state</li>
</ul><br />
Automation phải đoán. <hr /> <b>3. Không transactional</b><br />
<br />
<br />
Nếu push 50 dòng config:<br />
conf t<br />
interface gi1<br />
description TEST<br />
ip address ...<br />
router ospf 1<br />
...<br />
<br />
Dòng 23 fail?<br />
<br />
22 dòng trước vẫn đã apply.<br />
<br />
Rollback thủ công. <hr /> <b>4. Không phù hợp telemetry hiện đại</b><br />
<br />
<br />
CLI polling:<br />
show interface counters<br />
<br />
không phải cách tốt để lấy metric liên tục mỗi giây. <hr /> <b>YANG: trái tim của model-driven automation</b><br />
<br />
<br />
Điểm cốt lõi trong slide:<div style="margin-left:40px">YANG data models define the data</div> <br />
Đây là phần quan trọng nhất.<br />
<br />
YANG không phải protocol.<br />
<br />
YANG là <b>data modeling language</b>.<br />
<br />
Nó mô tả:<ul><li>cấu trúc dữ liệu</li>
<li>field</li>
<li>kiểu dữ liệu</li>
<li>hierarchy</li>
<li>constraints</li>
<li>config/state</li>
</ul><br />
Ví dụ logic:<br />
interface<br />
name<br />
description<br />
enabled<br />
mtu<br />
<br />
Automation không còn đoán nữa.<br />
<br />
Thiết bị công bố schema rõ ràng. <hr /> <b>Hai thế giới YANG phổ biến</b><br />
<br />
<b>OpenConfig</b><br />
<br />
<br />
Vendor-neutral.<br />
<br />
Được cộng đồng hỗ trợ:<ul><li>Google</li>
<li>operators</li>
<li>multi-vendor ecosystems</li>
</ul><br />
Ví dụ:<br />
/openconfig-interfaces:interfaces<br />
<br />
Ưu điểm:<br />
<br />
portable automation.<br />
<br />
Một script dùng cho nhiều vendor. <hr /> <b>Cisco Native</b><br />
<br />
<br />
Cisco-specific.<br />
<br />
Expose đầy đủ feature Cisco.<br />
<br />
Ví dụ:<ul><li>proprietary QoS</li>
<li>platform-specific knobs</li>
<li>advanced routing features</li>
</ul><br />
Tradeoff:<br />
<br />
Powerful hơn nhưng lock-in cao hơn. <hr /> <b>NETCONF: automation kiểu enterprise truyền thống</b><br />
<br />
<br />
NETCONF dùng:<ul><li>XML</li>
<li>SSH transport</li>
<li>RPC model</li>
</ul><br />
Thiết kế cho network configuration management.<br />
<br />
Ví dụ:<ul><li>get-config</li>
<li>edit-config</li>
<li>commit</li>
<li>lock datastore</li>
</ul><br />
Điểm mạnh:<br />
<br />
transactional configuration.<br />
<br />
Ví dụ:<br />
candidate config<br />
validate<br />
commit<br />
rollback<br />
<br />
Điều CLI rất khó làm sạch sẽ.<br />
<br />
NETCONF phù hợp khi:<ul><li>enterprise automation</li>
<li>configuration orchestration</li>
<li>compliance enforcement</li>
</ul><hr /> <b>RESTCONF: thân thiện với DevOps</b><br />
<br />
<br />
NETCONF mạnh.<br />
<br />
Nhưng XML khá nặng.<br />
<br />
RESTCONF sinh ra để hiện đại hơn.<br />
<br />
REST principles:<ul><li>GET</li>
<li>POST</li>
<li>PUT</li>
<li>PATCH</li>
<li>DELETE</li>
</ul><br />
Transport:<br />
<br />
HTTPS<br />
<br />
Payload:<ul><li>JSON</li>
<li>XML</li>
</ul><br />
Ví dụ:<br />
GET <a href="https://router/restconf/data/ietf-interfaces:interfaces" target="_blank">https://router/restconf/data/ietf-interfaces:interfaces</a><br />
<br />
Nếu team của bạn quen:<ul><li>Python requests</li>
<li>Postman</li>
<li>API testing</li>
<li>web services</li>
</ul><br />
RESTCONF dễ tiếp cận hơn NETCONF. <hr /> <b>gNMI: sinh ra cho telemetry tốc độ cao</b><br />
<br />
<br />
Nếu NETCONF/RESTCONF thiên về config management…<br />
<br />
gNMI thiên về:<ul><li>telemetry</li>
<li>streaming data</li>
<li>operational visibility</li>
</ul><br />
Nền tảng:<ul><li>gRPC</li>
<li>protobuf</li>
<li>subscription model</li>
</ul><br />
Thay vì polling:<br />
show interface counters<br />
<br />
ta subscribe:<br />
/interface counters stream<br />
<br />
Thiết bị push dữ liệu liên tục.<br />
<br />
Điều này cực kỳ quan trọng cho:<ul><li>AIOps</li>
<li>observability</li>
<li>anomaly detection</li>
<li>closed-loop automation</li>
</ul><hr /> <b>Vì sao SNMP dần yếu thế?</b><br />
<br />
<br />
SNMP từng là vua monitoring.<br />
<br />
Nhưng có nhiều hạn chế:<br />
<br />
Polling model:<br />
manager hỏi → device trả lời<br />
<br />
Không efficient ở scale lớn.<br />
<br />
Data model hạn chế.<br />
<br />
MIB complexity.<br />
<br />
Telemetry granularity thấp.<br />
<br />
Streaming telemetry với gNMI giải quyết tốt hơn nhiều.<br />
<br />
Điều này không có nghĩa SNMP chết.<br />
<br />
Nó vẫn tồn tại.<br />
<br />
Nhưng rõ ràng không còn là tương lai dài hạn. <hr /> <b>Intent-Based Networking kết nối mọi thứ</b><br />
<br />
<br />
Slide có nhắc:<br />
<br />
<b>Intent-based Network Infrastructure</b><br />
<br />
Đây là tầng orchestration cao hơn.<br />
<br />
Workflow:<br />
<br />
Intent:<div style="margin-left:40px">&quot;toàn bộ access switch phải bật NTP&quot;</div> <br />
Automation system:<ul><li>translate intent</li>
<li>map vào YANG models</li>
<li>push qua NETCONF/RESTCONF</li>
<li>verify operational state</li>
<li>remediate nếu drift</li>
</ul><br />
Đây là bước tiến từ:<br />
<br />
manual configuration<br />
<br />
→ automation scripts<br />
<br />
→ intent-driven operations <hr /> <b>Góc nhìn thực chiến</b><br />
<br />
<br />
Nếu bạn là CCNA/CCNP:<br />
<br />
Học RESTCONF trước.<br />
<br />
Lý do:<ul><li>dễ hiểu</li>
<li>JSON thân thiện</li>
<li>Postman test nhanh</li>
<li>Python automation đơn giản</li>
</ul><br />
Nếu bạn làm enterprise automation nghiêm túc:<br />
<br />
NETCONF + YANG rất đáng đầu tư.<br />
<br />
Nếu bạn làm observability/AIOps:<br />
<br />
gNMI + streaming telemetry gần như bắt buộc. <hr /> <b>Kết luận</b><br />
<br />
<br />
CLI chưa chết. CLI sẽ còn sống rất lâu. Nhưng nếu automation strategy của bạn vẫn là:<br />
send_command(&quot;show run&quot;)<br />
parse with regex<br />
<br />
thì bạn đang xây automation trên nền móng mong manh.<br />
<br />
Tương lai của network automation nằm ở:<br />
<br />
<b>data models + APIs + telemetry-driven operations</b><br />
<br />
Và đó chính là lý do programmable interfaces trở thành kiến thức bắt buộc với NetDevOps hiện đại.<br />
​]]></content:encoded>
			<category domain="https://www.forum.vnpro.org/forum/ccnp-enterprise/automation">CCNP Automation</category>
			<dc:creator>dangquangminh</dc:creator>
			<guid isPermaLink="true">https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/440495-các-giao-diện-lập-trình</guid>
		</item>
		<item>
			<title>Sync API và Async API</title>
			<link>https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/440371-sync-api-và-async-api</link>
			<pubDate>Mon, 18 May 2026 12:51:10 GMT</pubDate>
			<description>Sync API và Async API – Khái niệm nền tảng mà DevOps Engineer và CCNA Automation cần hiểu 
 
 
Khi học về Network Automation, DevOps, Cloud...</description>
			<content:encoded><![CDATA[<b>Sync API và Async API – Khái niệm nền tảng mà DevOps Engineer và CCNA Automation cần hiểu</b><br />
<br />
<br />
Khi học về <b>Network Automation, DevOps, Cloud Automation hay API Integration</b>, một trong những khái niệm nền tảng nhưng cực kỳ quan trọng là sự khác nhau giữa <b>Synchronous API (Sync API)</b> và <b>Asynchronous API (Async API)</b>.<br />
<br />
Rất nhiều người mới học automation thường chỉ tập trung vào việc:<ul><li>gọi API bằng Postman</li>
<li>viết Python requests</li>
<li>parse JSON</li>
<li>gửi GET hoặc POST</li>
</ul><br />
Nhưng trong môi trường thực tế, chỉ biết “gọi API” là chưa đủ.<br />
<br />
Điều quan trọng hơn là phải hiểu:<br />
<br />
<b>API này phản hồi theo mô hình nào?</b><br />
<br />
Bởi vì điều này ảnh hưởng trực tiếp đến cách bạn thiết kế automation script, xử lý lỗi, retry logic, timeout, thậm chí cả kiến trúc hệ thống. <hr /> <b>Vì sao DevOps và Network Automation phải hiểu chuyện này?</b><br />
<br />
<br />
Hãy tưởng tượng bạn viết một automation script để:<ul><li>lấy danh sách interface từ router Cisco</li>
<li>deploy cấu hình cho 200 switch</li>
<li>trigger CI/CD pipeline</li>
<li>provision infrastructure trên cloud</li>
<li>tạo Kubernetes cluster</li>
<li>rollout application deployment</li>
</ul><br />
Có những việc hoàn thành gần như ngay lập tức.<br />
<br />
Nhưng cũng có những việc mất:<ul><li>10 giây</li>
<li>30 giây</li>
<li>vài phút</li>
<li>thậm chí hàng chục phút</li>
</ul><br />
Nếu không hiểu mô hình API, code automation rất dễ:<ul><li>bị timeout</li>
<li>treo process</li>
<li>consume tài nguyên không cần thiết</li>
<li>retry sai cách</li>
<li>tạo duplicate request</li>
<li>gây lỗi production</li>
</ul><br />
Đây là lý do Sync vs Async là kiến thức nền. <hr /> <b>Sync API là gì?</b><br />
<br />
<br />
Synchronous API hoạt động theo mô hình đơn giản nhất:<br />
<br />
Client gửi request.<br />
<br />
Server xử lý.<br />
<br />
Server trả kết quả.<br />
<br />
Client chờ cho đến khi nhận response.<br />
<br />
Luồng hoạt động:<br />
Client → Request → Server<br />
Client ← Response ← Server<br />
<br />
Đây là kiểu giao tiếp “hỏi và trả lời ngay”.<br />
<br />
Ví dụ:<br />
<br />
Bạn gọi API lấy danh sách thiết bị từ Cisco controller:<br />
GET /dna/intent/api/v1/network-device<br />
<br />
Server trả về:<br />
{<br />
&quot;response&quot;: [<br />
{<br />
&quot;hostname&quot;: &quot;SW1&quot;,<br />
&quot;managementIpAddress&quot;: &quot;10.10.10.10&quot;<br />
}<br />
]<br />
}<br />
<br />
Dữ liệu đã có ngay trong response.<br />
<br />
Không cần gọi thêm API nào khác. <hr /> <b>Ví dụ đời thường</b><br />
<br />
<br />
Hãy tưởng tượng bạn gọi điện hỏi lễ tân khách sạn:<div style="margin-left:40px">“Phòng 503 còn trống không?”</div> <br />
Lễ tân kiểm tra hệ thống.<br />
<br />
Trả lời ngay:<div style="margin-left:40px">“Còn.”</div> <br />
Đó là Sync.<br />
<br />
Bạn hỏi.<br />
<br />
Họ trả lời.<br />
<br />
Kết thúc. <hr /> <b>Đặc điểm của Sync API</b><br />
<br />
<br />
Sync API phù hợp khi công việc xử lý nhanh.<br />
<br />
Ví dụ:<ul><li>query data</li>
<li>read configuration</li>
<li>health check</li>
<li>inventory lookup</li>
<li>telemetry retrieval</li>
<li>metrics collection</li>
</ul><br />
Trong DevOps:<br />
<br />
Lấy trạng thái pod Kubernetes:<br />
kubectl get pods<br />
<br />
REST API:<br />
GET /api/users<br />
<br />
Prometheus:<br />
GET /api/v1/query<br />
<br />
Trong Network Automation:<br />
<br />
RESTCONF:<br />
GET /restconf/data/Cisco-IOS-XE-native:native<br />
<br />
Lấy routing table:<br />
GET /restconf/data/Cisco-IOS-XE-routing:routing-state <hr /> <b>Ưu điểm của Sync API</b><br />
<br />
<br />
Mô hình này dễ hiểu.<br />
<br />
Dễ code.<br />
<br />
Dễ debug.<br />
<br />
Python code thường rất đơn giản:<br />
import requests<br />
<br />
response = requests.get(url, headers=headers)<br />
data = response.json()<br />
<br />
Không cần:<ul><li>polling</li>
<li>task tracking</li>
<li>callback</li>
<li>job monitoring</li>
</ul><br />
Rất phù hợp cho người mới học CCNA Automation. <hr /> <b>Nhược điểm của Sync API</b><br />
<br />
<br />
Vấn đề xuất hiện khi công việc xử lý lâu.<br />
<br />
Ví dụ:<br />
<br />
deploy cấu hình cho hàng trăm thiết bị.<br />
<br />
Provision site mới.<br />
<br />
Push software image.<br />
<br />
Run CI/CD pipeline.<br />
<br />
Terraform provisioning.<br />
<br />
Nếu server mất 2 phút để xử lý, client phải chờ.<br />
waiting...<br />
waiting...<br />
waiting...<br />
<br />
Khi đó:<br />
<br />
HTTP session bị giữ mở.<br />
<br />
Resource bị chiếm dụng.<br />
<br />
Có nguy cơ timeout.<br />
<br />
Ví dụ:<br />
504 Gateway Timeout <hr /> <b>Async API là gì?</b><br />
<br />
<br />
Async API xử lý khác hoàn toàn.<br />
<br />
Client gửi request.<br />
<br />
Server nhận request.<br />
<br />
Nhưng không xử lý xong ngay.<br />
<br />
Thay vào đó server trả về:<ul><li>task ID</li>
<li>execution ID</li>
<li>job reference</li>
<li>status URL</li>
</ul><br />
Ví dụ:<br />
POST /dna/intent/api/v1/site<br />
<br />
Server trả:<br />
{<br />
&quot;executionId&quot;: &quot;abc123&quot;,<br />
&quot;status&quot;: &quot;scheduled&quot;<br />
}<br />
<br />
Điều này có nghĩa:<br />
<br />
Server nói:<div style="margin-left:40px">“Tôi đã nhận việc. Hãy quay lại kiểm tra sau.”</div>  <hr /> <b>Luồng Async</b><br />
<br />
Client → Request → Server<br />
Client ← Task ID ← Server<br />
<br />
Client → Status Request → Server<br />
Client ← Status ← Server<br />
<br />
Client → Status Request → Server<br />
Client ← Completed Result ← Server <hr /> <b>Ví dụ đời thường</b><br />
<br />
<br />
Bạn đặt mua 50 server cho data center.<br />
<br />
Nhà cung cấp không thể giao ngay.<br />
<br />
Họ trả:<div style="margin-left:40px">“Đơn hàng #56789 đã được ghi nhận.”</div> <br />
Bạn kiểm tra sau:<br />
Processing<br />
Packing<br />
Shipping<br />
Delivered<br />
<br />
Đây chính là Async. <hr /> <b>Tại sao Async API rất quan trọng trong DevOps?</b><br />
<br />
<br />
Trong DevOps, rất nhiều tác vụ là long-running operations.<br />
<br />
Ví dụ:<br />
<br />
CI/CD pipeline:<br />
build<br />
test<br />
security scan<br />
package<br />
deploy<br />
<br />
Terraform:<br />
terraform apply<br />
<br />
Cloud provisioning:<ul><li>VM creation</li>
<li>Load balancer deployment</li>
<li>Database provisioning</li>
</ul><br />
Kubernetes:<ul><li>Job execution</li>
<li>rollout deployment</li>
</ul><br />
Ansible Tower:<ul><li>launch job template</li>
</ul><br />
Các tác vụ này không thể trả kết quả ngay. <hr /> <b>Network Automation cũng dùng Async rất nhiều</b><br />
<br />
<br />
Nhiều người nghĩ network API chỉ là GET configuration.<br />
<br />
Thực tế không phải.<br />
<br />
Ví dụ Cisco DNA Center:<ul><li>template deployment</li>
<li>software image upgrade</li>
<li>compliance remediation</li>
<li>PnP onboarding</li>
<li>site creation</li>
</ul><br />
Các tác vụ này backend cần:<ul><li>validate input</li>
<li>push workflow</li>
<li>update database</li>
<li>call controller services</li>
<li>execute provisioning tasks</li>
</ul><br />
Có thể mất nhiều thời gian.<br />
<br />
Nên controller dùng Async. <hr /> <b>DevOps Engineer phải code khác như thế nào?</b><br />
<br />
<br />
Nếu Sync:<br />
response = requests.get(url)<br />
print(response.json())<br />
<br />
Nếu Async:<br />
<br />
Bước 1:<br />
response = requests.post(url)<br />
task_id = response.json()[&quot;executionId&quot;]<br />
<br />
Bước 2:<br />
<br />
Polling:<br />
while True:<br />
status = requests.get(task_url).json()<br />
<br />
if status[&quot;state&quot;] == &quot;COMPLETED&quot;:<br />
break <hr /> <b>Những thứ phải nghĩ khi xử lý Async</b><br />
<br />
<b>Timeout</b><br />
<br />
<br />
Không thể polling mãi:<br />
max_wait = 300 <hr /> <b>Retry</b><br />
<br />
<br />
Nếu gặp:<br />
429 Too Many Requests<br />
<br />
hoặc:<br />
503 Service Unavailable<br />
<br />
Phải retry hợp lý. <hr /> <b>Failure state</b><br />
<br />
<br />
Task không phải lúc nào cũng thành công.<br />
<br />
Ví dụ:<br />
FAILED<br />
ABORTED<br />
PARTIAL_SUCCESS<br />
<br />
Automation script phải xử lý. <hr /> <b>Idempotency</b><br />
<br />
<br />
Nếu request bị timeout:<br />
<br />
Người mới thường gửi lại request.<br />
<br />
Hậu quả:<ul><li>duplicate deployment</li>
<li>duplicate VM</li>
<li>duplicate workflow</li>
</ul><br />
Production incident xảy ra từ đây. <hr /> <b>CCNA Automation cần nhớ gì?</b><br />
<br />
<br />
Nếu bạn học DevNet, CCNA Automation hoặc bắt đầu Network Automation:<br />
<br />
Hãy nhớ:<br />
<br />
<b>GET thường là Sync</b><br />
<br />
Ví dụ:<br />
GET interfaces<br />
GET routes<br />
GET device inventory<br />
<br />
<b>POST/PUT cho provisioning thường dễ là Async</b><br />
<br />
Ví dụ:<br />
POST template deployment<br />
POST software upgrade<br />
POST site provisioning<br />
<br />
Không phải lúc nào cũng đúng, nhưng đây là pattern phổ biến. <hr /> <b>So sánh nhanh</b><br />
<br />
<br />
Sync:<ul><li>đơn giản</li>
<li>immediate response</li>
<li>blocking</li>
<li>phù hợp tác vụ nhanh</li>
</ul><br />
Async:<ul><li>scalable</li>
<li>non-blocking</li>
<li>cần task tracking</li>
<li>phù hợp tác vụ dài</li>
</ul><hr /> <b>Kết luận</b><br />
<br />
<br />
Khi học automation, nhiều người chỉ học:<br />
<br />
“API là GET/POST.”<br />
<br />
Nhưng tư duy production thực tế là:<br />
<br />
<b>API có execution model riêng.</b><br />
<br />
Một DevOps Engineer hay Network Automation Engineer trưởng thành phải luôn tự hỏi:<ul><li>API này sync hay async?</li>
<li>Có timeout không?</li>
<li>Có task ID không?</li>
<li>Polling ra sao?</li>
<li>Retry thế nào?</li>
<li>Failure handling thế nào?</li>
</ul><br />
Đó là khác biệt giữa:<br />
<br />
<b>viết script demo</b><br />
<br />
và<br />
<br />
<b>xây automation chạy production thật.</b><br />
​]]></content:encoded>
			<category domain="https://www.forum.vnpro.org/forum/ccnp-enterprise/automation">CCNP Automation</category>
			<dc:creator>dangquangminh</dc:creator>
			<guid isPermaLink="true">https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/440371-sync-api-và-async-api</guid>
		</item>
		<item>
			<title>Các yếu tố chính khi thực hành DevOps</title>
			<link>https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/440327-các-yếu-tố-chính-khi-thực-hành-devops</link>
			<pubDate>Mon, 18 May 2026 03:27:46 GMT</pubDate>
			<description>Continuous Delivery / Continuous Integration (CI/CD) 
CI/CD hỗ trợ mục tiêu giảm thời gian cập nhật hoặc triển khai phần mềm đồng thời nâng cao chất...</description>
			<content:encoded><![CDATA[<span style="font-family:&amp;amp"><b>Continuous Delivery / Continuous Integration (CI/CD)</b></span><br />
<span style="font-family:&amp;amp"><b>CI/CD hỗ trợ mục tiêu giảm thời gian cập nhật hoặc triển khai phần mềm đồng thời nâng cao chất lượng.</b></span><ul><li><span style="font-family:&amp;amp"><b>Continuous Integration (CI) giúp tăng hiệu quả bằng cách cho phép các thành viên trong nhóm phát triển các module độc lập trước khi tích hợp chúng vào một môi trường build chung. </b></span></li>
<li><span style="font-family:&amp;amp"><b>Continuous Deployment (CD) đảm bảo chất lượng bằng cách kiểm thử các bản build trong môi trường production. </b></span></li>
</ul><hr /><br />
<span style="font-family:&amp;amp"><b>Tự động hóa quy trình (Automating Processes)</b></span><br />
<span style="font-family:&amp;amp"><b>Automation giúp giảm lỗi do con người và cải thiện khả năng phản hồi của môi trường phát triển. Các công cụ tự động hóa giúp:</b></span><ul><li><span style="font-family:&amp;amp"><b>Chuẩn hóa quy trình để dễ dàng tái sử dụng </b></span></li>
<li><span style="font-family:&amp;amp"><b>Giảm chi phí bảo trì, nâng cấp và đầu tư hạ tầng </b></span></li>
<li><span style="font-family:&amp;amp"><b>Rút ngắn vòng đời phát triển phần mềm bằng cách giảm thời gian triển khai </b></span></li>
<li><span style="font-family:&amp;amp"><b>Tăng độ tin cậy và khả năng tái sử dụng của các thành phần hệ thống </b></span></li>
</ul><hr /><br />
<span style="font-family:&amp;amp"><b>Xây dựng văn hóa DevOps</b></span><br />
<span style="font-family:&amp;amp"><b>Kết hợp đội ngũ phát triển phần mềm và vận hành IT thành một đội DevOps mạnh mẽ đòi hỏi sự thay đổi về văn hóa tổ chức. Có thể bắt đầu bằng cách:</b></span><ul><li><span style="font-family:&amp;amp"><b>Tăng cường giao tiếp giữa các nhóm </b></span></li>
<li><span style="font-family:&amp;amp"><b>Triển khai các dự án nhỏ để tạo cơ hội cộng tác </b></span></li>
<li><span style="font-family:&amp;amp"><b>Xác định những nhân sự chủ chốt để phát triển thành DevOps Engineer </b></span></li>
<li><span style="font-family:&amp;amp"><b>Lựa chọn các công cụ dùng chung nhằm cung cấp dữ liệu khách quan </b></span></li>
</ul><hr /><br />
<span style="font-family:&amp;amp"><b>Đo lường DevOps</b></span><br />
<span style="font-family:&amp;amp"><b>Các chỉ số KPI giúp đánh giá hiệu quả triển khai DevOps. Một số chỉ số quan trọng gồm:</b></span><ul><li><span style="font-family:&amp;amp"><b>Tần suất triển khai (Deployment Frequency) </b></span></li>
<li><span style="font-family:&amp;amp"><b>Tỷ lệ lỗi khi thay đổi hệ thống (Change Failure Rate) </b></span></li>
<li><span style="font-family:&amp;amp"><b>Thời gian khôi phục trung bình – MTTR (Mean Time To Recovery) </b></span></li>
<li><span style="font-family:&amp;amp"><b>Lead Time </b></span></li>
<li><span style="font-family:&amp;amp"><b>Khối lượng thay đổi (Change Volume) </b></span></li>
<li><span style="font-family:&amp;amp"><b>Tỷ lệ lỗi lọt ra production (Defect Escape Rate) </b></span></li>
<li><span style="font-family:&amp;amp"><b>Ticket hỗ trợ khách hàng </b></span></li>
</ul><hr /><br />
<span style="font-family:&amp;amp"><b>Sự khác biệt giữa DevOps và Agile</b></span><br />
<span style="font-family:&amp;amp"><b>DevOps</b></span><br />
<span style="font-family:&amp;amp"><b>DevOps là phương pháp tập trung vào sự tích hợp và cộng tác giữa đội phát triển phần mềm và đội vận hành IT nhằm rút ngắn chu kỳ phát triển và triển khai sản phẩm.</b></span><br />
<span style="font-family:&amp;amp"><b>Agile</b></span><br />
<span style="font-family:&amp;amp"><b>Agile là phương pháp phát triển phần mềm tập trung vào việc cập nhật và phát triển từng phần nhỏ của phần mềm theo từng giai đoạn liên tục để cải tiến sản phẩm.</b></span>  <hr /><br />
<span style="font-family:&amp;amp"><b>Các loại công cụ sử dụng trong DevOps</b></span><br />
<span style="font-family:&amp;amp"><b>Build Server</b></span><br />
<span style="font-family:&amp;amp"><b>Build Server là một công cụ tự động hóa cho phép mã nguồn trong repository được biên dịch thành chương trình có thể chạy được.</b></span><br />
<span style="font-family:&amp;amp"><b>Ví dụ phổ biến:</b></span><ul><li><span style="font-family:&amp;amp"><b>Jenkins </b></span></li>
<li><span style="font-family:&amp;amp"><b>SonarQube </b></span></li>
<li><span style="font-family:&amp;amp"><b>JFrog Artifactory </b></span></li>
</ul><hr /><br />
<span style="font-family:&amp;amp"><b>Source Code Repository</b></span><br />
<span style="font-family:&amp;amp"><b>Source Code Repository là thành phần quan trọng của Continuous Integration, cho phép lập trình viên quản lý nhiều phiên bản mã nguồn mà không ảnh hưởng đến công việc của nhau.</b></span><br />
<span style="font-family:&amp;amp"><b>Các công cụ phổ biến:</b></span><ul><li><span style="font-family:&amp;amp"><b>Git </b></span></li>
<li><span style="font-family:&amp;amp"><b>Bitbucket </b></span></li>
<li><span style="font-family:&amp;amp"><b>Apache Subversion </b></span></li>
</ul><hr /><br />
<span style="font-family:&amp;amp"><b>Configuration Management</b></span><br />
<span style="font-family:&amp;amp"><b>Configuration Management giúp duy trì tính nhất quán và chất lượng của hạ tầng CNTT.</b></span><br />
<span style="font-family:&amp;amp"><b>Các công cụ phổ biến:</b></span><ul><li><span style="font-family:&amp;amp"><b>Puppet </b></span></li>
<li><span style="font-family:&amp;amp"><b>Ansible </b></span></li>
<li><span style="font-family:&amp;amp"><b>Chef </b></span></li>
</ul><hr /><br />
<span style="font-family:&amp;amp"><b>Virtual Infrastructure</b></span><br />
<span style="font-family:&amp;amp"><b>Virtual Infrastructure là các dịch vụ hạ tầng dựa trên cloud cung cấp Infrastructure hoặc Platform as a Service (PaaS).</b></span><br />
<span style="font-family:&amp;amp"><b>Ví dụ:</b></span><ul><li><span style="font-family:&amp;amp"><b>Amazon Web Services (AWS) </b></span></li>
<li><span style="font-family:&amp;amp"><b>Microsoft Azure </b></span></li>
</ul><span style="font-family:&amp;amp"><b>Khi kết hợp với công cụ automation, virtual infrastructure hỗ trợ DevOps bằng cách cho phép quản trị viên tự động kiểm thử mã nguồn mà không cần thao tác thủ công.</b></span>  <hr /><br />
<span style="font-family:&amp;amp"><b>Containers</b></span><br />
<span style="font-family:&amp;amp"><b>Containers là các thành phần ảo hóa giúp cô lập ứng dụng hoặc workload khỏi hệ điều hành host trong quá trình phát triển.</b></span><br />
<span style="font-family:&amp;amp"><b>Các nền tảng phổ biến:</b></span><ul><li><span style="font-family:&amp;amp"><b>Docker </b></span></li>
<li><span style="font-family:&amp;amp"><b>Kubernetes </b></span></li>
<li><span style="font-family:&amp;amp"><b>CoreOS</b></span></li>
</ul>​]]></content:encoded>
			<category domain="https://www.forum.vnpro.org/forum/ccnp-enterprise/automation">CCNP Automation</category>
			<dc:creator>anhnguyxn</dc:creator>
			<guid isPermaLink="true">https://www.forum.vnpro.org/forum/ccnp-enterprise/automation/440327-các-yếu-tố-chính-khi-thực-hành-devops</guid>
		</item>
	</channel>
</rss>
