Phát triển hệ phân tán với kiến trúc vi dịch vụ

65 771 1
Phát triển hệ phân tán với kiến trúc vi dịch vụ

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Phát triển hệ phân tán với kiến trúc vi dịch vụPhát triển hệ phân tán với kiến trúc vi dịch vụPhát triển hệ phân tán với kiến trúc vi dịch vụPhát triển hệ phân tán với kiến trúc vi dịch vụPhát triển hệ phân tán với kiến trúc vi dịch vụPhát triển hệ phân tán với kiến trúc vi dịch vụPhát triển hệ phân tán với kiến trúc vi dịch vụPhát triển hệ phân tán với kiến trúc vi dịch vụ

HỌC VIỆN CÔNG NGHỆ BƢU CHÍNH VIỄN THÔNG - NGUYỄN THỊ MINH THỦY PHÁT TRIỂN HỆ PHÂN TÁN VỚI KIẾN TRÚC VI DỊCH VỤ LUẬN VĂN THẠC SĨ KỸ THUẬT (Theo định hướng ứng dụng) HÀ NỘI - 2016 HỌC VIỆN CÔNG NGHỆ BƢU CHÍNH VIỄN THÔNG - NGUYỄN THỊ MINH THỦY PHÁT TRIỂN HỆ PHÂN TÁN VỚI KIẾN TRÚC VI DỊCH VỤ CHUYÊN NGÀNH : HỆ THỐNG THÔNG TIN MÃ SỐ: 60.48.01.04 LUẬN VĂN THẠC SĨ KỸ THUẬT (Theo định hướng ứng dụng) NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS TS HÀ HẢI NAM HÀ NỘI - 2016 i LỜI CAM ĐOAN Lu n v n n y l th nh giúp đỡ, khuyến khí h qu tr nh họ t p nghi n quý thầy u s u n m t i theo họ tạo Thạ sĩ, huy n ng nh Hệ thống th ng tin t i ng s hương tr nh đ o trường Họ viện C ng nghệ Bưu hính Viễn th ng T i m đo n l ng tr nh nghi n u th m khảo v sử dụng số th ng tin, t i liệu từ k d nh mụ ri ng t i Nội dung ó nguồn s h, tạp hí đượ liệt t i liệu th m khảo v đượ trí h dẫn hợp ph p TÁC GIẢ Nguyễn Th Minh Thủy ii LỜI CẢM ƠN T i xin gửi lời ảm ơn v tri ân tới thầy gi o, n Họ viện C ng nghệ Bưu hính Viễn th ng giúp đỡ, tạo điều kiện tốt ho t i qu tr nh họ t p v nghi n u hương tr nh Thạ sỹ T i xin gửi lời ảm ơn sâu sắ tới Phó gi o sư, Tiến sĩ H Hải N m t n t nh hướng dẫn, giúp đỡ v động vi n t i để ho n th nh tốt “Ph t triển hệ thống phân t n với kiến trú vi dị h vụ” Do vốn kiến th lý lu n v kinh nghiệm th tiễn òn n n không tránh khỏi thiếu sót định T i xin trân trọng tiếp thu ý kiến để đượ ho n thiện T giả Nguyễn Th Minh Thủy thầy, iii MỤC LỤC LỜI CAM ĐOAN i LỜI CẢM ƠN ii MỤC LỤC iii DANH MỤC TỪ VIẾT TẮT v DANH MỤC CÁC HÌNH VẼ vi MỞ ĐẦU CHƢƠNG TỔNG QUAN VỀ HỆ THỐNG VI DỊCH VỤ 1.1 Giới thiệu hệ thống vi d ch vụ 1.1.1 điểm 1.1.2 Ưu điểm 1.1.3 Nhượ điểm kiến trú hệ thống vi dị h vụ kiến trú hệ thống vi dị h vụ .8 kiến trú hệ thống vi dị h vụ 1.2 So sánh kiến trúc vi d ch vụ với kiến trúc liên quan 10 1.2.1 Kiến trú hệ thống nguy n khối Monilithi System .10 1.3 Mô hình nguyên mẫu 11 1.4 Các đặc trƣng giao d ch hệ thống phân tán 12 1.4.1 M h nh “h i gi i đoạn” 12 1.4.2 Mô hình Saga 13 1.4.3 M h nh đ t hỗ Reserv tion 14 1.5 Kết luận Chƣơng 15 CHƢƠNG GIẢI PHÁP MÔ HÌNH HÓA HỆ PHÂN TÁN VỚI KIẾN TRÚC VI DỊCH VỤ 17 2.1 Mô hình h a d ch vụ .17 2.2 Giải pháp tích hợp hệ phân tán với kiến trúc vi d ch vụ 17 2.2.1 Phân tí h kiến trú hệ thống b n h ng KSS 17 2.2.2 Phân tí h th nh phần h n ng “Cre te meeting from Absolon” 19 iv 2.2.3 Phân tí h nguy n mẫu hệ thống KSS 21 2.2.4 Sơ đồ lớp hi tiết .30 2.2.5 Biểu đồ tuần t 32 2.3 Kết lu n Chương 35 CHƢƠNG CÀI ĐẶT VÀ THỬ NGHIỆM 37 3.1 Cài đặt vi d ch vụ 37 3.1.1 Apache Kafka 37 3.1.2 C i đ t dị h vụ 37 3.2 Cấu hình lớp Cache .43 3.3 Triển khai thành phần xử lý ngắt 45 3.3.1 Luồng th ng điệp h n ng Topi re te_or_upd te_topi 46 3.4 Cài đặt hệ thống 46 3.4.1 C i đ t m y h v nguy n mẫu 46 3.4.2 C i đ t m i trường JDeveloper 3.4.3 C i đ t K fk Or le .47 M y ảo 47 3.4.4 C i đ t R bitMQ 47 3.4.5 C i đ t So pUI 47 3.4.6 C i đ t D t b se – MySQA .48 3.4.7 Chạy h n ng 48 3.5 Kết luận Chƣơng 48 KẾT LUẬN 49 TÀI LIỆU THAM KHẢO 55 v DANH MỤC TỪ VIẾT TẮT KSS Kostumer Sales System Hệ thống b n h ng MS Microservice System Hệ thống vi dị h vụ MAS Microservice Architectuaral Style Kiểu kiến trú vi dị h vụ vi DANH MỤC CÁC HÌNH VẼ Hình 1-1 Phương th c hoạt động c a lu t Conway [8] .5 Hình 1-2 Microservice application database [8] Hình 1-3 Mô hình l p nguyên mẫu (iterative model) [2, 7] 11 Hình 1-4 Xác nh n th c “h i gi i đoạn” [2, 10] 13 Hình 1-5 Mô hình Saga [2, 10] 14 Hình 1-6 M h nh đ t chỗ [2, 11] 15 Hình 2-1 Sơ đồ ch n ng “Cre te meeting from Abs lon” kiến trúc nguyên khối [2, 14] 19 Hình 2-2 Kiến trú mi roservi e ho trường hợp “Cre te meeting from Ab s lon” [2, 25] 21 Hình 2-3 Kiến trúc microservice với máy ch KSS [2, 33] .23 Hình 2-4 Kiến trúc thành phần thư viện microservice dùng chung 24 Hình 2-5 Kiến trú thư viện thành phần sở Microservice 25 Hình 2-6 Kiến trúc thành phần Microservice Máy ch KSS [2, 38] .27 Hình 2-7 Luồng th ng điệp microservice [2, 39] 28 Hình 2-8 Lớp đối tượng đ t chỗ (Reservation model) .32 Hình 2-9 Biểu đồ tuần t cho ch Hình 2-10 Biểu đồ cho ch n ng “Cre te meeting from Abs lon” 34 n ng tạo g p 35 MỞ ĐẦU Tính cấp thiết đề tài Ng y n y, Mi roservi es đượ qu n tâm giới phần mềm, ng nghệ với nhiều b i viết, blog, thảo lu n, truyền th ng, hội thảo Kỳ vọng khả n ng Mi roservi e đ ng l n đỉnh giống xu hướng thời tr ng đ ng l n rộng Ngượ lại, số người ho rằng, mi roservi es kh ng ó g lạ, hẳng qu l SOA kiến trú hướng dị h vụ đượ đ nh bóng, đổi t n m th i M ho đ nh gi m ng tính ảo tường h y bảo th , kiến trú mi roservi es đem lại lợi í h thiết th hỗ trợ phương ph p gile th ấp giải ph p ph t triển phần mềm ph s hiệu v ung tạp ho nh nghiệp Kiến trú hướng vi dị h vụ Mi roservi e Ar hite tu r l Style - MAS) h xây d ng hệ thống phần mềm Một hệ thống vi dị h vụ b o gồm nhiều dị h vụ nhỏ m gi o tiếp với nh u qu mạng Mỗi dị h vụ ó vòng đời ph t triển phần mềm ri ng biệt ể l m việ h hính x , dị h vụ n y phải phụ thuộ v o nh u ể đ nh gi lợi hệ thống vi dị h vụ lu n v n nghi n d ng nguy n mẫu – sản phẩm phần mềm d Mẫu đượ xây d ng d tr n h “Customer S les System” KSS lu n v n nghi n u u v xây tr n hệ thống vi dị h vụ n ng tồn hệ thống b n h ng ng ty Alm Br n h Th ng qu nguy n mẫu, h để ải thiện v đạt đượ độ sẵn s ng o với hi phí bảo tr thấp Tổng quan vấn đề nghiên cứu Lu n v n thạ sĩ n y nghi n u hiến lượ độ sẵn s ng v bảo tr hệ thống mi roservi e Một nguy n mẫu mi roservi e nhỏ đượ xây d ng d tr n h n ng th tế “ re te meeting from bs lon”nằm hệ thống nguy n khối quản lý b n h ng KSS tảng ho việ nghi n ó tính rời rạ o u h th Alm Br nd Nguy n mẫu n y l đảm bảo độ sẵn s ng hệ thống Một hệ thống mi roservi e ó thể thường xuy n mở rộng với v theo thời gi n h số lượng lớn dị h vụ mi roservi e độ l p nhỏ hơn, điều n y ó thể ảnh hưởng kh ng tốt tới vấn đề bảo tr Lượng thời gi n v khối lượng ng việ hệ thống đòi hỏi việ bảo tr s u v o kh i th ó ảnh hưởng lớn trường hợp kinh nh v giảm gi trị lợi nhu n d kiến b n đầu Chi phí bảo tr d n suốt vòng đời 40-80%, thường l m ho hi phí bảo tr vượt qu điều qu n trọng l lu n xem xét m th thường đượ ướ tính từ hi phí ph t triển b n đầu Do v y, độ thời gi n hệ thống ti u tốn để bảo tr v mở rộng Mi roservi e hệ thống thường h số lượng định h n ng tương t nh u Do v y, lu n v n d định xem xét việ đóng gói h n ng n y nhằm hi sẻ giữ dị h vụ với nh u giúp ho việ bảo tr hệ thống mi roservi e đơn giản v tốn Cụ thể: Nghi n - u hiến lượ đảm bảo độ sẵn s ng ho hệ thống KSS sử dụng kiến trú mi roservi e Cụ thể lu n v n thử nghiệm với việ i đ t th thi circuit breaker bulkhead, sau so s nh kết n y với kiến trú KSS Nghi n - u hiến lượ th y đổi ho trường hợp hệ thống KSS, t p trung v o việ giảm thiểu hi phí bảo tr th ng qu việ thiết kế v i đ t fr mework mi roservi e n o Mục đích, đối tƣợng, phạm vi phƣơng pháp nghiên cứu Phương ph p hính đượ th lu n v n thạ sĩ n y l sử dụng m h nh l p l p lại việ tạo nguy n mẫu Qu tr nh n y giúp t i ó kinh nghiệm nh nh tiếp ũng đượ x n kiểu kiến trú mi roservi e, ng với vấn đề b t định sớm để xem xét Cấu trúc luận văn Nội dung lu n v n đượ tr nh b y b phần hính s u: Phần mở đầu - Tính cấp thiết c đề tài - Tổng quan vấn đề nghiên c u 42 publicclass RequestObjectMapper { publicstatic Topic toTopic(JsonObject object) { returnnew Gson().fromJson(object, Topic.class); } } oạn ode minh họ dễ d ng để sử dụng Google JSON để huyển đổi đối tượng JSON JsonObje t th nh đối tượng Topi C h n ng phi n đầu ti n n y kh ng b o gồm xử lý ngoại lệ, v hỉ đượ thử nghiệm với trường hợp liệu lý tưởng Ở phi n s u h nh động onMess ge lần thực thứ đượ bổ sung th m số điểm xử lý v kiểm so t ngoại lệ, lỗi ối tượng event đượ huyển s ng định dạng JSON nd gửi tới ho h ng đợi/topi y u ầu publicfinalvoid publish(Event event, String topic) throws SystemException { String message = ""; try { if (topic == null || topic == "") { logger.error("Topic was empty "); thrownew SystemException("No topic has been defined"); } if (eventinstanceof ResponseEvent) { message = new GsonUtils().toJSON((ResponseEvent)event); } elseif (eventinstanceof RequestEvent) { message = new GsonUtils().toJSON((RequestEvent)event); } if (event != null) { if (message != null&& !message.equals("")) { getKafka().getProducer().publish(topic, event.getKey(), message); } else { thrownew SystemException("data object was null or empty"); } } } catch (Exception e) { logger.error("Could not publish messageError: " + message, e); } } 43 3.2 Cấu hình lớp Cache publicclass Cache { privatestatic Cache instance; private ListreservationCache; private Cache() {} publicstatic Cache getInstance() { if(instance == null) { instance = new Cache(); } returninstance; } private List getRequestEventCache() { if(reservationCache == null) { reservationCache = new ArrayList(); } returnreservationCache; } publicvoid insert(Reservation reservation) { getRequestEventCache().add(reservation); } publicvoid update(Reservation reservation) { for(Reservation reservation1 : getRequestEventCache()) { if(reservation1.getUuid().equals(reservation.getUuid())) { reservation1.setApplication(reservation.getApplication()); reservation1.setData(reservation.getData()); reservation1.setEntryDate(reservation.getEntryDate()); reservation1.setPrimaryKey(reservation.getPrimaryKey()); } } } publicvoid remove(String uuid) { Reservation reservation = getByCorrelationId(uuid); if(reservation != null) { getRequestEventCache().remove(reservation); } } public Reservation getByCorrelationId(String uuid) { System.out.println("Looking up Uuid: " + uuid); for(Reservation reservation : getRequestEventCache()) { System.out.println("Current Uuid: " + reservation.getUuid()); if(reservation.getUuid().equals(uuid)) { returnreservation; } 44 Dưới l phương th phương th onMess ge Nó xử lý tất fr mework Tại phương th Phương th ả th ng điệp nh n đượ th ng điệp đượ phân tí h để x onMess ge gọi phương th i đ t th định loại th ng điệp S u xử lý tương ng h ndleEvent h ndleEvent xử lý lưu đ t hỗ nhớ đệm v x để gọi phương th buộ phải hính khung fr mework mi roservi e, nh n hợp lệ xử lý ph hợp mi roservi e: h ndleRequestEvent, bắt thi y u ầu interf e Mi roservi eWr pper privatevoid handleEvent(Event event, booleanvalid) throws SystemException { try { // If its not a valid message, log the raw data to invalid queue if (!valid) { logger.error("Invalid message"); logInvalidMessage(event, event.getJson(), null, "Unknown"); return; } if (event.getObject() instanceof String && String.valueOf(event.getObject()).equals(HeartbeatImpl.PING)) { heatbeat.setIsAlive(true); return;} // Aimed at the end implementation if (eventinstanceof ConfirmationEvent) { ConfirmationEvent confirmation = (ConfirmationEvent)event; Reservation reservation = Cache.getInstance().getByCorrelationId(event.getKey()); if (reservation != null) { event.setObject(reservation.getData()); handleConfirmationEvent(confirmation); Cache.getInstance().remove(event.getKey()); } else { ResponseEvent response = buildResponseEvent(ResultCodes.STATUS_RESERVATION_NOT_FOUND, "Not able to find reservation or its expired", event.getKey(), confirmation.getObject(), event.getApplicationId()); publish(response, ((ConfirmationEvent)event).getResponseQueue()); return; } } elseif (eventinstanceof RequestEvent) { RequestEvent requestEvent = (RequestEvent)event; String primaryKey = ""; if (isUpdateEvent(requestEvent)) { primaryKey = getPrimaryKey(event); if (Cache.getInstance().getByKey(primaryKey) != null) { ResponseEvent response buildResponseEvent(ResultCodes.STATUS_RESERVED, "Data requested is already reserved", event.getKey(), event.getObject(), event.getApplicationId()); publish(response, requestEvent.getResponseQueue()); return; }} intresultCode = handleRequestEvent(requestEvent); if (isUpdateEvent(requestEvent) &&resultCode == ResultCodes.STATUS_RESERVATION_OK) { // Message is a re-reservation Update timestamp and return Reservation reservation = Cache.getInstance().getByCorrelationId(requestEvent.getKey()); if (reservation != null) { reservation.setEntryDate(new Date()); Cache.getInstance().update(reservation); = 45 3.3 Triển khai thành phần xử lý ngắt Th nh phần xử lý ngắt đượ ph t triển phần lần th Package - dk.almbrand.microservice.common.circuitbreaker ây l p k ge hính h to n th nh phần xử lý ngắt ir uit bre ker - Lớp CircuitBreaker ây l interf e định nghĩ h n ng th nh phần xử lý ngắt - Lớp CircuitBreakerImpl ây l lớp hính ung ấp v xử lý h trạng th i hính th nh phần v n ng li n qu n tới xử lý thời gi n hờ timeout Khi lớp xử lý ngắt đượ khởi tạo, trạng th i b n đầu đượ g n l trạng th i óng Closed Lớp n y ung ấp h i phương th Bằng h ung ấp h i h n ng ó thể l ung ấp s linh hoạt ho họ ần hính để khởi tạo xử lý ngắt họn l C ll ble ho nh ph t triển để l Run ble n y, họn kiểu ph hợp m ồng thời ũng l tiền đề định để t h khỏi phần òn lại thư public T doAction(Callable callable, Class type) publicvoid doAction(Runnable runnable) viện Phương th doA tion đượ gọi đối tượng ó i đ t interf e C ll ble đượ khởi tạo, trường hợp n y l Prote tedProdu er, đượ đóng gọi produ er đơn giản th API việ th m th ng điệp v o h ng đợi sử dụng K fk Khi y u ầu đượ xử lý xong, luồng thre d đượ ngắt Khi xử lý ngắt trạng th i óng Closed , đếm lỗi đượ thiết l p ProtectedProducerImpl protectedProducer newProtectedProducerImpl(producer, new CircuitBreakerImpl(3, 6000 * 1000000)); lại Nếu ngoại lệ xảy r đượ ph t trạng th i = óng Closed , 46 đếm lỗi đượ t ng th m Khi đếm n y đạt đến ngưỡng đ nh dấu, xử lý ngắt huyển s ng trạng th i Mở Open publicclass Closed extends CircuitBreakerState { public Closed(CircuitBreaker circuitBreaker) { super(circuitBreaker); circuitBreaker.resetFailureCount(); } @Override publicvoid exceptionOccurred(Exception e) { super.exceptionOccurred(e); if(circuitBreaker.thresholdReached()) circuitBreaker.moveToOpenState(); } } 3.3.1 Lu ng thông điệp chức Topic.create_or_update_topic Dưới l ví dụ luồng th ng điệp đầy đ re te_or_upd te_topi , d phần tr n sở gi o th lu n v n n y Việ th đ t hỗ đượ ho i đ t th luồng th ng điệp qu Bướ 1: Khởi tạo lient Bướ 2: Dị h vụ đ p trả đ t hỗ Bướ 3: Client x Bướ 4: Dị h vụ x nh n đ t hỗ nh n th 3.4 Cài đặt hệ thống 3.4.1 Cài đặt máy ch nguyên mẫu Link m y h ảo K fk : http://users-cs.au.dk/baerbak/c/vm/claus_nielsen_master_vm.zip Link mã nguồn, ấu h nh, mo ks v logs: http://users-cs.au.dk/baerbak/c/vm/cn_ms_prototype.zip h n ng bướ s u: 47 3.4.2 Cài đặt môi trường JDeveloper c a Oracle Bướ Tải v i đ t JDeveloper http://www.oracle.com/technetwork/developertools/jdev/downloads/jdev121 20download-2220222.html Bướ Tải v v i đ t phi n M ven https://maven.apache.org/download.cgi?Preferred=ftp://mirror.reverse.net/pu b/apache/ Bướ Import proje t v o JDeveloper 3.4.3 Cài đặt Kafka (Máy ảo) Bướ Tải m y ảo K fk http://users-cs.au.dk/baerbak/c/vm/claus_nielsen_master_vm.zip Bướ 2: iền Usern me/p sswords M y ảo Ubuntu: Cl us D Nielsen/Herkules1 Hostn me m y ảo: ubuntu Bướ 3: Kiểm tr K fk su root/Herkules1 cd /opt/kafka/kafka_2.8.0-0.8.1.1/bin/ Start Kafka: /zookeeper-server-start.sh / /config/zookeeper.properties & /kafka-server-start.sh./ /config/server.properties Stop Kafka: /zookeeper-server-stop.sh 3.4.4 Cài đặt RabitMQ Bướ Tải R bitMQ https://www.rabbitmq.com/download.html Bướ 2: Chạy R bbitMQ 3.4.5 Cài đặt SoapUI Bướ 1: Tải So pUI Link tải So pUI : 48 http://www.soapui.org/getting-started/installing-soapui/installing-onwindows.html Bướ 2: Mở proje t : /so pui/NotesAPI-soapui-proje t.xml nằm file nén b n ạnh mã nguồn Bướ 3: Chạy Mo kserver tr n 8088 3.4.6 Cài đặt Database – MySQA Bướ 1: C i đ t MySQL Link download MySQL: http://dev.mysql.com/downloads/windows/ Bướ 2: Chạy s ripts đẻ tạo sở liệu ho dị h vụ file s ript b n ạnh mã nguồn Topic: /database/topic_db/create.sql Event: /database/event_db/create.sql Calendar: /database/calendar_db/create.sql M định ấu h nh sở liệu l lo lhost:3306 v t i khoản root/root Trong trường hợp ấu h nh n y kh ng với iđ t bạn, ó thể đượ th y đổi file ấu h nh persist n e.xmlnằm proje t KSS thư mụ Servi e/META-INF/persistance.xml 3.4.7 Chạy chức Một lớp khởi tạo l dk lmbr nd.server.Initi lizer.j v nằm proje t KSS, có trá h nhiệm khởi tạo v th thi h n ng nguy n mẫu 3.5 Kết luận Chƣơng Chương nghi n bướ chạy h u v tr nh b y phương ph p iđ t dị h vụ theo h hi tiết v rõ r ng Ngo i r , Chương òn nghi n n ng v triển kh i th nh phẩn xử lý u hệ thống vi dị h vụ h 49 KẾT LUẬN Kết đạt đƣợc Lu n v n ph t triển phi n ụ thể ho h n ng “ re te meeting from Abs lon”, để ó đượ kinh nghiệm với kiểu kiến trú microservice nghiên u giải ph p để đảm bảo m bảo tr ần thiết tr n độ o độ sẵn s ng ũng giảm hi phí mi roservi e th ng qu việ sử dụng lại ồng thời, lu n v n l m rõ nội dung s u đây: a, Nội dung thứ Nghi n u hiến lượ đảm bảo độ sẵn s ng ho trường hợp thống KSS sử dụng kiến trú mi roservi e ng với m h nh xử lý ngắt biệt t triển kh i thử nghiệm ir uit bre ker , m h nh v h ng n bulkhe d v so s nh kết độ sẵn s ng với kiến trú nguy n khối Một số m h nh v giải ph p kh độ sẵn s ng lý ngắt hệ hệ thống KSS ũng đượ xem xét để đảm bảo y u ầu o T định triển kh i th phi n m h nh xử ir uit bre ker kết hợp với sử dụng thời gi n hờ timeout đượ đề xuất ả Nyg rd [23, hương 5] v Fowler [24] M h nh xử lý ngắt he ho ng dụng từ bảo vệ m ir uit bre ker y u ầu từ b n ngo i, điều n y đảm bảo s ng dụng b n ngo i 3rd l Kafka o ho mi roservi e từ Kết l hệ thống mạnh mẽ v v y ải thiện độ ổn định/ độ sẵn s ng to n hệ thống M h nh v h ng n bulkhe d ph p để đảm bảo m độ sẵn s ng mi roservi e v sử dụng ũng đượ giới thiệu p dụng l giải o Bởi hất kiến trú hệ thống h ng đợi th ng điệp để li n lạ với nh u, hệ thống t động th ng qu m h nh v h ng n Theo hất, dị h vụ gắn kết lỏng lẻo loosely oupled , đảm bảo ngoại lệ xảy r dị h vụ kh ng ảnh hưởng tới phần òn lại mi roservi e hệ thống Sử dụng K fk trung gi n xử lý th ng điệp broker s o ũng hỗ trợ nhiều thể hiện/bản ng dị h vụ, giúp ải thiện độ ổn định/sẵn s ng to n hệ thống 50 Một h n ng sử dụng m h nh he rtbe t ũng đượ th tổng qu n tốt trạng th i Ch dị h vụ, l số lượng n ng n y đượ bổ sung v o thư viện ph t triển số lượng thi để ó i nh n mi roservi e t ng mi roservi e để bảo vệ trướ s dị h vụ Nó ũng giúp ải thiện độ sẵn s ng, lỗi thất bại v gi n đoạn dị h vụ đượ ph t từ sớm giúp giữ thời gi n gi n đoạn dị h vụ gần m tối thiểu Do kh ng ó số liệu n o độ sẵn s ng monolith tại, n n d kiến b n đầu hệ thống nguy n khối t việ so s nh độ ổn định hệ thống với hệ thống theo kiểu kiến trú mi roservi e l kh ng th đượ Tuy nhi n, hiến lượ đảm bảo độ sẵn s ng đượ triển kh i th nguy n mẫu prototype giúp đạt đượ m độ o độ sẵn s ng v v y góp phần v o hệ thống mi roservi e mạnh mẽ v đ ng tin y b, Nội dung thứ hai Nghi n u hiến lượ sử đổi ho trường hợp hệ thống KSS, t p trung v o việ giảm hi phí bảo tr th ng qu việ thiết kế v triển kh i th khung (framework) microservice chung Một thư viện mi roservi e d ng đượ xây d ng Thư viện n y đảm bảo tất ả h thiểu số lượng n ng đượ hi sẻ l độ l p thư viện, giúp giảm thử nghiệm ần thiết đồng thời ũng giữ ho hi phí ph t triển, bảo tr giảm ho th y đổi n o thư viện Khi ó s th y đổi thư viện d ng hung, s th y đổi đượ t động ụ thể hó xuống i đ t thư viện n y, v uối ng l tất ả dị h vụ ó mi roservi e hệ thống Khung l m việ mi roservi e hỉ dừng lại gi i đoạn đầu, ho thấy tiềm n ng lớn Sẽ hỉ phút để lấy mi roservi e sơ kh i v h sử dụng thư viện trung v o số lượng lớn h iều n y ó nghĩ l hạy nh ph t triển ó thể t p n ng nghiệp vụ phụ vụ kinh nh v kh ng ần lo lắng vấn đề s u l xử lý li n lạ , h y s bắt t y, tương t giữ gi o dị h phân t n, xử lý th ng điệp dị h vụ 51 Chúng t ph t triển gi o th việ ho đ t tr mi roservi e d đơn giản phần tr n m h nh đ t hỗ Nó đượ triển kh i tiếp vấn đề l gi o th để h y bỏ d ng khung l m n y hư ung ấp l n el đ t hỗ Th y v o đó, vấn đề n y đượ xử lý h n ng th i họn h xây việ dọn dẹp Khung mi roservi e t ph t triển ho thấy dễ d ng để khởi hạy mi roservi e, ó số lượng lớn giải như: hi phí li n lạ , xử lý mi roservi e … S ph tạp mi roservi e Nó hỉ đơn giản l vấn đề ph tạp ần phải đượ gi o dị h phân t n, hi sẻ liệu giữ hệ thống kh ng đượ giảm bớt sử dụng huyển từ th nh phần n y hệ thống s ng th nh phần kh , ó thể l từ dị h vụ s ng ho đối tượng sử dụng ller Ng y n y tất ả h n ng nghiệp vụ thường đượ th xong m y h phụ trợ b kend Trong hệ thống mi roservi e, phần đượ nghiệp vụ n y hi th nh dị h vụ phần òn lại ần đượ xử lý đối tượng sử dụng ller Microservi e l kiểu kiến trú phần mềm v đ ng ph t triển Một bạn xử lý đượ vấn đề ph tạp đượ n u lu n n n y, t tin kh ng ó lý g để kh ng xem xét h nghi m tú việ sử dụng kiểu kiến trú n y th y v kiểu kiến trú nguy n khối Kh ng nói l tốt hơn, ph t biểu “wh t you lose on the swings, you g in on the round bouts” l thí h hợp t nh n y ây ũng l vấn đề m mụ ti u uối ng Cuối lu n v n n y hướng tới ng, việ l họn giải ph p mi roservi e ung ấp s linh hoạt việ mở rộng hệ thống Nó th hệ thống v s dễ d ng để th th y đổi kí h ỡ ó thể t động khởi hạy thể mở rộng dị h vụ trường hợp tải y u ầu Mỗi dị h vụ l nhỏ v khép kín, giúp húng dễ d ng đượ bảo tr , ph t triển, triển kh i v hạn hế đượ nguy gây ph vỡ ấu trú h n ng hệ thống Nó ung ấp s t việ l ng nghệ n o l ph hợp ho dị h vụ ụ thể Cuối họn ng v qu n trọng, 52 vấn đề lớn n y l th tế hệ thống nguy n khối ần phải đượ kiểm thử v triển kh i to n trướ đượ đư v o sử dụng, ng y ả v lỗi nhỏ Quy tr nh xây d ng ho hệ thống theo kiến trú mi roservi e l nh nh v ph hợp với y u ầu n y s nh nh nhẹn v nhiều ph t h nh nhỏ Hạn chế Chi phí vận hành: ể mở rộng hệ thống nguy n khối ần sử dụng ân tải v th triển kh i phi n đầy đ rộng phần hệ thống tr n v i m y h Kh ng thể mở hệ thống nguy n khối, lu n lu n l tất ả ho kh ng g ả Vấn đề n y lại đượ hỗ trợ mi roservi e, húng vừ nhỏ vừ khép kín v gi o tiếp với nh u th ng qu h ng đợi th ng điệp, phi n dị h vụ ó thể dễ d ng đượ bắt đầu v lắng nghe tr n ng h ng đợi M t kh , ó thể triển kh i h ng hụ dị h vụ ri ng biệt tr n số lượng lớn kh nh u; bổ sung th m m y h xử lý th ng điệp, m y h phòng lỗi v ân tải Kí h thướ m y h sở liệu, d tổng thể m i trường n y ó thể vượt qu so s nh với kí h thướ m i trường nguy n khối Khi p dụng th hệ thống mi roservi e ó thể đượ viết v i ng n ngữ kh hạy tr n v i kiểu m y h ng dụng kh nh u Với tế, nh u v lý n y, l họn giải ph p mi roservi e ũng y u ầu quản trị hệ thống phải ó kỹ n ng tốt v nắm bắt nhiều ng nghệ Sự phức tạp c a hệ th ng phân tán: Mi roservi e dẫn tới nhiều APIs ho th ng điệp ho uộ gọi th tụ từ x , sử dụng REST th nh phần n y li n lạ với nh u tr n tiến tr nh v m y h kh nh u Một hệ thống phân t n với kí h ỡ v y t ng mối lo ngại độ trễ mạng, khả n ng hịu lỗi, xử lý seri liz tion th ng điệp, độ tin mạng, đồng bộ, phi n bản, s phân tải kh nh u lớp ng dụng… y 53 Một số húng ó thể đượ giải ph t triển.Ngượ lại, khả n ng tương thí h l thuộ tính ó thể kh ng đượ y u ầu giải ph p th y ho hệ thống nguy n khối Những nghi n u li n qu n tới hệ thống phân t n l kh ng ần thiết ho mở rộng giống nh u giải ph p th y hệ thống nguy n khối C c chi phí l ho nh ph t triển phải xử lý tất ả họ hư l m Hệ thống phân t n ó độ ph l họn v r i ro, điều m trướ tạp để ph t triển v thử nghiệm lại lớn so với hệ thống nguy n khối Thách thức đ i với khả thử nghiệm: Khi nhiều dị h vụ tiến hó mở rộng với tố độ kh nh u, ó thể khó kh n để tạo lại m i trường ph hợp ho ả việ thử nghiệm th ng ho t động Bổ sung th m s đồng v tải th ng điệp t động ó thể l m việ kiểm thử khó kh n với hệ thống mi rsoservi e v với việ x t p định m độ tin tưởng dị h vụ đượ đư v o kh i th Về ph t triển/ bảo tr , th t dễ d ng để kiểm tr mi roservi e ri ng biệt n o đó, m i trường động, th y đổi nhỏ n o ũng ó thể ảnh hưởng tới s tương t giữ dị h vụ v khó ó thể h nh dung v suy đo n trướ đượ , hư nói đến việ kiểm tr to n diện Trong hệ thống nguy n khối, điều n y thường tầm kiểm so t nhóm ph t triển d n, v v y việ thử nghiệm to n hệ thống trở n n dễ d ng Tuy nhi n, thử nghiệm phần nhỏ th ó thể khó kh n hệ thống mi roservi e 54 Hƣớng phát triển Nghi n u giải ph p tiềm n ng kh h y hiến lượ để giải vấn đề gi o dị h phân t n l th y v y u ầu qu n ng y l p v bổ sung lượ d phòng g p s [14] hiến ố Chiến lượ n y ũng đ ng đượ sử dụng eB y 55 TÀI LIỆU THAM KHẢO Tài liệu Tiếng Anh [1] Alain Abran, J W Moore, P Bourque, R Dupuis, and L L Tripp, 2014 “Softw re Engineering Body of Knowledge” In: IEEE Computer Society, Angela Burgess [2] C.D Nielsen, 2015, - Investigate availability and maintainability within a microservice architecture [3] J Kreps LinkedIn Corp, N Narkhede LinkedIn Corp, J Rao LinkedIn Corp Apache Kafka, 2015, - A Distributed Messaging System for Log Processing [4] L Bass, P Clements & R Kazman, 2003, - Software Architecture in Practice (2nd Edition) [5] Martin Fowler and James Lewis, 2015, - Microservices [6] Monolithic Design (Accessed on 04/02/2015) [7] Scalability Best Practices: Lessons from eBay (Accessed 08/06/2015) 56 Website tham khảo [8] http://martinfowler.com/articles/microservices.html [9] http://omega.cs.iit.edu/~ipro329/methodology.html [10] http://hosteddocs.ittoolbox.com/PM043004.pdf [11] http://www.sei.cmu.edu/library/assets/whitepapers/SOA_Terminology.pdf [12] http://www.w3.org/TR/ws-arch/#service_oriented_architecture [13] http://kafka.apache.org/ [...]...3 - Mụ đí h, đối tượng, phạm vi, phương ph p nghiên c u 2 Phần nội dung: b o gồm b hương CHƢƠNG 1: TỔNG QUAN VỀ KIẾN TRÚC VI DỊCH VỤ 1.1.Tổng quan về Kiến trúc vi dịch vụ - Kh i niệm về Kiến trú vi dị h vụ - Ưu, nhượ điểm Kiến trú vi dị h vụ 1.2 So sánh Kiến trúc vi dịch vụ với Kiến trúc liên quan - Giới thiệu về Kiến trú một khối, Kiến trú hướng dị h vụ - Ưu, nhượ điểm Kiến trú một khối 1.3 Kết luận... trú một khối 1.3 Kết luận Chương 1 CHƢƠNG 2: GIẢI PHÁP MÔ HÌNH HÓA HỆ PHÂN TÁN VỚI KIẾN TRÚC VI DỊCH VỤ 2.1 Mô hình hóa các dịch vụ - C h xây d ng m h nh kiến trú vi dị h vụ - Triển kh i, nguy n lý hoạt động m h nh 2.2 Giải pháp tích hợp trong hệ phân tán với kiến trúc vi dịch vụ điểm hệ thống phân t n - Khả n ng gi o tiếp giữ dị h vụ nhỏ th ng qu API - Khả n ng mở rộng v tí h hợp 2.3 Kết luận Chương... một dịch vụ có nhiều th c thể phân tán ra nhiều Theo Adrian Crockcroft, Hailo có 160 dịch vụ, NetFlix ó hơn 600 dịch vụ Trong dịch vụ đ m mây, m y ảo, docker container, th c thể có thể linh động b t tắt, dịch chuyển V y cần thiết phải có một ơ hế phát hiện dịch vụ 10 servi e dis overy me h nism để c p nh t t động địa chỉ IP và cổng, mô tả, phiên bản c a mỗi dịch vụ 1.2 So sánh kiến trúc vi d ch vụ với. .. tảng ho s phân tí h hệ thống hương II loại gi o dị h phân t n để 17 CHƢƠNG 2 GIẢI PHÁP MÔ HÌNH HÓA HỆ PHÂN TÁN VỚI KIẾN TRÚC VI DỊCH VỤ 2.1 Mô hình h a các d ch vụ Trong hương n y, một nguy n mẫu hệ thống b n h ng KSS – Kostomer S les System đượ sử dụng để minh họ qu tr nh m h nh hó dị h vụ trong hệ thống phân t n với kiến trú vi dị h vụ Th ng qu nguy n mẫu, lu n v n sẽ nghi n u m phương ph p triển kh... đ t triển kh i phương ph p m h nh 3.3 Đánh giá mô hình thử nghiệm - Ưu điểm, nhượ điểm m h nh thử nghiệm - ư r giải ph p 3.4 Kết luận Chương 3 3 Phần kết luận Những đóng góp lu n v n Những m t hạn hế Hướng ph t triển tiếp theo lu n v n 4 CHƢƠNG 1 TỔNG QUAN VỀ HỆ THỐNG VI DỊCH VỤ 1.1 Giới thiệu về hệ thống vi d ch vụ 1.1.1 Đặc đi m c a kiến trúc hệ th ng vi dịch vụ Hệ thống vi dị h vụ Mi roservi e... vi t mã kiểm thử t động - Một số dịch vụ có thuê ngoài phát triển mà vẫn bảo m t hệ thống - mã nguồn phần dịch vụ còn lại ội phát triển có nhiều l a chọn công nghệ mới, framework, CSDL mới, đ dạng để nâng cấp từng dịch vụ nhỏ, chọn m i trường tối ưu nhất để chạy Các dịch vụ có thể b t tắt để kiểm nghiệm so sánh A|B, t ng tốc quá trình cải tiến giao diện Triển kh i đều đ n khả thi với microservice Dịch. .. tới nhu ầu phải xây d ng, triển kh i v thử nghiệm to n bộ ng dụng 1.3 Mô hình nguyên mẫu Lu n v n d định sẽ xem xét vi đóng gói dị h vụ nhằm hi sẻ giữ h n ng một hệ thống vi dị h vụ với nh u giúp ho vi bảo tr một hệ thống mi roservi e đượ đơn giản hơn v ít tốn kém hơn Cụ thể: - Nghi n u hiến lượ đảm bảo độ sẵn s ng ho hệ thống vi dị h vụ sử dụng kiến trú vi dị h vụ - Nghi n vi thiết kế v u hiến lượ... quyết l l để xử lý gi o dị h phân t n một họn m h nh tiềm n ng n o h tối ưu? V l m thế n o để mở rộng khung microservice chung (microservice framework)? 2.2 Giải pháp tích hợp trong hệ phân tán với kiến trúc vi d ch vụ 2.2.1 hân tích kiến trúc hệ th ng bán hàng (KSS) Thành phần m y h KSS l một phần trong một hệ thống ng dụng lớn hơn l hệ thống b n h ng KSS hiện đ ng đượ kh i th Hệ thống b n h ng KSS l... thư vi n n y - Thành phần thư vi n Utils Thư vi n Utils b o gồm h n ng để huyển đổi s ng JSON v ngượ lại, sử dụng thư vi n GSON đối tượng J v Google  Kiến trúc các thành phần thư vi n cơ sở Hình 2-5 Kiến trúc thƣ vi n các thành phần cơ sở Microservice Thư vi n ơ sở Mi roservi e h tất ả h n ng ơ bản ần thiết khi triển kh i một Mi roservi e - Thành phần Heartbeat / Handshaking Một hệ thống mi roservi... gi o diện API th nhưng l m vi như một gi o diện phí ngo i đơn giản bắt hướ theo tí h hợp th tế  Kiến trúc các thành phần thư vi n dùng chung mo k s n o thiết l p 24 Hình 2-4 Kiến trúc các thành phần thƣ vi n microservice dùng chung Thư vi n mi roservi ve d ng hung ung ấp h n ng ho vi tí h hợp n to n với m y h h ng đợi th ng điệp K fk , thư vi n Utils l m vi với JSON v với th nh phần xử lý ngắt bảo

Ngày đăng: 02/12/2016, 04:12

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan