MỤC LỤC
● Layer 7 load balancer: Layer 7 load balancer hoạt động ở tầng ứng dụng (application layer) của mô hình OSI và sử dụng thông tin từ giao thức ứng dụng (chủ yếu là HTTP) để đưa ra quyết định định tuyến. ● Layer 3/4 load balancer: Layer 3/4 load balancer hoạt động ở tầng mạng (network layer) và tầng vận chuyển (transport layer) của mô hình OSI và sử dụng thông tin về địa chỉ IP và cổng TCP/UDP để đưa ra quyết định định tuyến.
Chương trình luôn đọc từ cache, nếu không có dữ liệu đó, cache sẽ tự đọc từ database và ghi vào bộ nhớ của mình, sau đó trả kết quả cho chương trình. Khi thực hiện ghi, chương trình ghi vào cache, cache sẽ gom các thao tác ghi lại theo mẻ (batch) và thực hiện ghi vào database theo chu kỳ, bất đồng bộ so với chương trình.
● Tính cách ly cao: Khi có lỗi xảy ra ta có thể dễ dàng xác định được là nó nằm gọn trong dịch vụ nào mà không cần phải lo về việc lỗi xảy ra ở một dịch vụ khác nhưng lại do update một dịch vụ khác. ● Deploy nhanh: Do life cycle độc lập và các service có thể deploy riêng nên việc dừng các tiến trình đang chạy để khởi tạo các tiến trình mới với các update mới nhanh hơn nhiều so với monolithic system.
● Code base nhỏ: Mỗi team sẽ chỉ cần quan tâm và quản lý codebase riêng của service mà họ đang phát triển. ● Service mesh: Service mesh là một lớp trung gian giữa các dịch vụ, cung cấp các tính năng như cân bằng tải, bảo mật và giám sát để giúp quản lý giao tiếp giữa các dịch vụ.
● Yêu cầu nhân lực nhiều hơn: Khi triển khai một hệ thống microservice thì ta cần phải có một đội ngũ các DevOps làm việc với nhau để có thể đưa hệ thống từ development lên production. Tuy nhiên, nếu được thiết kế và triển khai đúng cách, microservices có thể mang lại nhiều lợi ích cho doanh nghiệp, chẳng hạn như khả năng mở rộng linh hoạt, availability cao và khả năng phát triển nhanh chóng.
● Giới hạn tốc độ: API Gateway có thể giới hạn số lượng yêu cầu từ một client trong một khoảng thời gian nhất định để ngăn chặn các cuộc tấn công từ chối dịch vụ (DoS) hoặc giảm thiểu các request bất thường. ● Decouple giao diện: Giao diện không dính với các service phía sau nên ta có thể thay đổi thiết kế của hệ thống, chỉ cần đảm bảo api gateway vẫn cung cấp thông tin đúng format là UI vẫn chạy.
Một vấn đề quan trọng trong Saga là đảm bảo bước thực hiện local transaction và bước gửi message được thực hiện một cách đơn nhất (atomic), để không có tình trạng service ngừng hoạt động sau khi thực hiện local transaction nhưng lại trước khi gửi message, dẫn tới mất nhất quán giữa service đó - cũng như các service đã thực hiện local transaction trước nó - và các service còn lại trong saga. Đồng thời, saga cũng đảm bảo availability cao hơn so với 2PC/3PC do client chỉ cần đợi service đang thực hiện local transaction mà không cần phải chờ tất cả các service tham gia transaction - các service khác vẫn có thể xử lý yêu cầu trên các dữ liệu transaction, cũng như không cần phải áp dụng các cơ chế khóa đọc - ghi trong cả thời gian thực hiện transaction.
Mỗi nhiệm kỳ có thể có nhiều nhất 1 leader, trường hợp nhiệm kỳ không có leader có nghĩa là số phiếu được chia đều cho các candidate hoặc số lượng server không hoạt động bằng hoạt vượt quá phân nửa tổng số server trong cluster.
● Vì mọi thao tác ghi đều thông qua leader và chỉ có thể có 1 leader trong một cluster tại một thời điểm, nên các thao tác ghi về cơ bản không có khả năng scale horizontal. Nếu leader bị lỗi Byzantine và gửi các AppendEntries request khác nhau hoặc ngẫu nhiên cho các follower, toàn bộ cluster sẽ không còn bất kỳ sự nhất quán nào.
● Vòng đời phát triển nhanh và hiệu quả: Docker giúp rút ngắn thời gian phát triển bằng cách cho phép các lập trình viên làm việc trong các môi trường giống nhau sử dụng các local container cung cấp các ứng dụng và dependency cần thiết. Việc monitor các thành phần của hệ thống quan trọng, nhất là khi có vấn đề xảy ra, thay vì phải manually đi tìm ra nguồn gốc của lỗi thì ta deploy một hệ thống để lấy các thông số của hệ thống rồi tổng hợp nó lại.
MyBatis-Plus (viết tắt là MP) là một công cụ tăng cường cho MyBatis, chỉ tập trung vào việc tăng cường mà không thay đổi gì về cơ bản của MyBatis, được tạo ra để đơn giản hóa quá trình phát triển và nâng cao hiệu suất. AutoGenerator là công cụ tạo mã của MyBatis-Plus, thông qua AutoGenerator, bạn có thể nhanh chóng tạo mã cho các mô-đun như Entity, Mapper, Mapper XML, Service, Controller và các mô-đun khác, tăng cường đáng kể hiệu suất phát triển.
Từ phiên bản 3.1 trở đi, Spring đã định nghĩa các giao diện org.springframework.cache.Cache và org.springframework.cache.CacheManager để thống nhất các công nghệ cache khác nhau và hỗ trợ sử dụng các chú thích JCache (JSR-107) để đơn giản hóa quá trình phát triển của chúng ta. Giá trị trả về sau khi phương thức được thực thi (chỉ có giá trị khi đánh giá sau khi phương thức được thực thi, chẳng hạn như biểu thức 'unless', 'cache put' và biểu thức 'cache evict' beforeInvocation=false).
Khi khuyến mãi flash sale bắt đầu, ai nhanh hơn sẽ được nhập hàng đợi trước, sau đó nhanh chóng trả về thông tin liệu người dùng đã đến trong vài giây không, và sau đó xử lý công việc sau khuyến mãi flash sale một cách trơn tru. Nội dung tin nhắn là mờ và tiêu đề tin nhắn bao gồm một loạt các thuộc tính tùy chọn, bao gồm routing-key (khóa định tuyến), priority (ưu tiên so với các tin nhắn khác), delivery-mode (chỉ ra rằng tin nhắn có thể cần lưu trữ Persistent), vv.
• Một cụm ElasticSearch có thể chứa nhiều index, và mỗi index có thể chứa nhiều loại (types). Các loại khác nhau này lưu trữ nhiều tài liệu, mỗi tài liệu có nhiều thuộc tính khác nhau.
Xây dựng môi trường PaaS riêng của bạn bằng cách biên dịch từ đầu hoặc mở rộng một nền tảng OpenShift hoặc Cloud Foundry đã có sẵn.
Sau khi máy chủ tài nguyên xác minh rằng mã thông báo là chính xác, nếu thông tin liên quan của người dùng được sử dụng để truy cập tài nguyên, máy chủ tài nguyên cũng cần sử dụng mã thông báo để truy vấn thông tin người dùng liên quan. Do đó, nếu chúng ta kết hợp JWT khi sử dụng OAuth2, chúng ta có thể tiết kiệm được chi phí của việc xác minh mã thông báo tập trung và đạt được ủy quyền và xác thực không lưu trạng thái.
Spring Boot Security tích hợp OAuth2 để thiết kế dịch vụ giao diện API an ninh Spring Boot Security tích hợp JWT để thực hiện giao diện API phân tán không lưu trạng thái. Sau khi máy chủ xác định rằng tên người dùng và mật khẩu là chính xác, nó có thể mã hóa thông tin người dùng và thông tin quyền hạn và trả về cho khách hàng dưới dạng JWT.
Chúng ta nói rằng giao dịch phân tán là một giao dịch toàn cầu bao gồm một lô các giao dịch nhánh, và thông thường các giao dịch nhánh chỉ là giao dịch địa phương. • Quản lý tài nguyên (RM): Quản lý tài nguyên của các giao dịch nhánh đang được xử lý, giao tiếp với TC để đăng ký các giao dịch nhánh và báo cáo trạng thái của các giao dịch nhánh, và thực hiện việc commit hoặc rollback của các giao dịch nhánh.
TC thúc đẩy tất cả các giao dịch nhánh trong giao dịch toàn cầu tương ứng của XID để hoàn thành commit hoặc rollback của các giao dịch nhánh. Bean Validation là một framework xác thực dữ liệu thời gian chạy, và thông tin lỗi xác thực sẽ được trả về ngay sau khi xác thực.
Có một cụm Eureka cho mỗi vùng, và ít nhất một máy chủ eureka trong mỗi vùng để xử lý các sự cố vùng trong trường hợp máy chủ gặp sự cố. Khách hàng tương tác với máy chủ eureka thông qua http rest để triển khai các dịch vụ đăng ký, dịch vụ gia hạn, dịch vụ ngoại tuyến, v.v.
Trong kiến trúc microservice, như một ví dụ để đảm bảo tính sẵn có của chương trình và ngăn chương trình lỗi gây ra tắc nghẽn mạng, mô hình cầu dao điện đã xuất hiện. Một chức năng quan trọng của Turbine là tổng hợp thông tin giám sát và cung cấp thông tin giám sát đã thu thập được cho Bảng điều khiển Hystrix để hiển thị và giám sát tập trung.