基於Java的微服務架構原始碼案例Abixen
微服務越來越受歡迎,每個月都有更多的庫包和解決方案來支援微服務的開發測試,很多Java開發人員雖然聽說過微服務,但是真正採用還是有猶豫的:“我知道,微服務是非常棒的,微伺服器更容易維護和進一步開發,但我們沒有建立一個良好的基於微服務架構的資源。”
許多嘗試建立微服務應用程式(例如使用Netflix OSS堆疊)的開發人員都疑惑他們是否有足夠的知識來配置整個系統。因為微服務架構所需知識與與單片monolithic 應用程式非常不同,需要額外的元件功能,如請求監視,用於在服務之間共享通訊的佇列,登錄檔服務,配置服務等等。同時為每個微服務保留一個單獨的資料模型也是一個很好的做法。
在建立模組化Web應用程式時,開發人員必須專注於精心設計的業務領域設計。將模組之間的所有耦合最小化,這樣至少避免了體系架構的複雜性。
Abixen Platform是一個完整的微服務架構系統,其原始碼可見Github地址:https://github.com/abixen/abixen-platform,其體系組成部分如下:
1. Eureka:作為服務的註冊器。
2. Hystrix儀表板:允許我們實時監控請求狀態(例如,多少請求超時,多少次成功,多少次失敗等)。
3. Zipkin:一種分散式跟蹤系統,可幫助您收集應用程式中發生高延遲問題(效能慢)所需的資料。
4. Redis資料庫:用於儲存登入使用者的資訊。
5. RabbitMQ:用作在特定微伺服器之間傳送訊息的佇列。例如,核心微服務刪除一個模組例項,需要讓商業智慧微服務或Web內容微服務刪除與其相關的所有配置。
6. Abixen Platform Common:包含用函式式微服務實現的通用API的JAR。
7. Abixen平臺配置:配置微服務。整個應用程式可以在YAML檔案中進行逐個配置。
8. Abixen Platform Web Client:核心功能的靜態內容,如頁面和模組管理,安全管理等。
9. Abixen平臺閘道器:起到安全閘道器的作用。每個請求都必須透過這個微服務。
10. Abixen平臺核心:擁有自己的業務核心資料庫,擁有平臺的核心功能,如頁面和模組管理,安全管理等。
11. Abixen平臺商業智慧服務:由於應用程式帶來了函式性的微服務,因此我們將在這裡放置一個用於商業智慧報告,圖表建立和進一步管理的模組。它也有自己的資料庫。
12. Abixen平臺Web內容服務:這與上述服務類似,但是這個函式可以提供內容建立功能,例如使用者可以建立文章。它還有自己的資料庫。
13. 您的服務:由開發人員使用該平臺建立的定製微服務。
該架構基於Netflix OSS技術棧。函式性的微服務不需要在整個平臺上都要部署,您如果不需要圖表或文章管理器,您也可以部署這個平臺並使用獨立開發的微服務。
該架構也很好地對映到Amazon元件。使用諸如EC2,ALB,ECS,ECR,Route53,CloudWatch,Elasticache,ERD和SES之類的服務在AWS上部署應用程式。
工作原理:
1. 使用者使用Web客戶端生成請求。透過Zuul Proxy,請求被轉發到閘道器微服務。
2. 閘道器微服務執行安全操作。如果使用者未透過身份驗證,則會引發“未經授權”的異常。如果經過身份驗證,則Zuul Proxy會決定將請求傳送到核心平臺或指定的微服務,如商業智慧,Web內容或由第三方開發人員建立的。
在下面的列表中,我們可以看到路由的示例配置:
如何建立自己的微服務?
想要建立自己函式式微服務的開發人員可以使用通用API,有抽象介面,還必須包含部署描述符。該部署描述符檔案描述了包含哪些模組,什麼可用的靜態資源,以及控制皮膚中是否有某種配置皮膚(控制皮膚是可配置的)。下面的列表是一個微伺服器的部署描述符示例:
我們可以看到,Java開發人員不必從頭開始建立整個微服務架構。Abixen平臺為你準備了現成的微服務解決方案,並可以立即開始開發函式式微服務。
許多嘗試建立微服務應用程式(例如使用Netflix OSS堆疊)的開發人員都疑惑他們是否有足夠的知識來配置整個系統。因為微服務架構所需知識與與單片monolithic 應用程式非常不同,需要額外的元件功能,如請求監視,用於在服務之間共享通訊的佇列,登錄檔服務,配置服務等等。同時為每個微服務保留一個單獨的資料模型也是一個很好的做法。
在建立模組化Web應用程式時,開發人員必須專注於精心設計的業務領域設計。將模組之間的所有耦合最小化,這樣至少避免了體系架構的複雜性。
Abixen Platform是一個完整的微服務架構系統,其原始碼可見Github地址:https://github.com/abixen/abixen-platform,其體系組成部分如下:
1. Eureka:作為服務的註冊器。
2. Hystrix儀表板:允許我們實時監控請求狀態(例如,多少請求超時,多少次成功,多少次失敗等)。
3. Zipkin:一種分散式跟蹤系統,可幫助您收集應用程式中發生高延遲問題(效能慢)所需的資料。
4. Redis資料庫:用於儲存登入使用者的資訊。
5. RabbitMQ:用作在特定微伺服器之間傳送訊息的佇列。例如,核心微服務刪除一個模組例項,需要讓商業智慧微服務或Web內容微服務刪除與其相關的所有配置。
6. Abixen Platform Common:包含用函式式微服務實現的通用API的JAR。
7. Abixen平臺配置:配置微服務。整個應用程式可以在YAML檔案中進行逐個配置。
8. Abixen Platform Web Client:核心功能的靜態內容,如頁面和模組管理,安全管理等。
9. Abixen平臺閘道器:起到安全閘道器的作用。每個請求都必須透過這個微服務。
10. Abixen平臺核心:擁有自己的業務核心資料庫,擁有平臺的核心功能,如頁面和模組管理,安全管理等。
11. Abixen平臺商業智慧服務:由於應用程式帶來了函式性的微服務,因此我們將在這裡放置一個用於商業智慧報告,圖表建立和進一步管理的模組。它也有自己的資料庫。
12. Abixen平臺Web內容服務:這與上述服務類似,但是這個函式可以提供內容建立功能,例如使用者可以建立文章。它還有自己的資料庫。
13. 您的服務:由開發人員使用該平臺建立的定製微服務。
該架構基於Netflix OSS技術棧。函式性的微服務不需要在整個平臺上都要部署,您如果不需要圖表或文章管理器,您也可以部署這個平臺並使用獨立開發的微服務。
該架構也很好地對映到Amazon元件。使用諸如EC2,ALB,ECS,ECR,Route53,CloudWatch,Elasticache,ERD和SES之類的服務在AWS上部署應用程式。
工作原理:
1. 使用者使用Web客戶端生成請求。透過Zuul Proxy,請求被轉發到閘道器微服務。
2. 閘道器微服務執行安全操作。如果使用者未透過身份驗證,則會引發“未經授權”的異常。如果經過身份驗證,則Zuul Proxy會決定將請求傳送到核心平臺或指定的微服務,如商業智慧,Web內容或由第三方開發人員建立的。
在下面的列表中,我們可以看到路由的示例配置:
zuul: host: connect-timeout-millis: 10000 socket-timeout-millis: 60000 routes: # Begin of custom module microservices - add mapping relevant to your microservice # Begin of Business Intelligence microservice businessIntelligenceApplication: path: /service/abixen/business-intelligence/application/** url: http://business-intelligence-service:9091/service/abixen/business-intelligence/application sensitive-headers: businessIntelligenceApplicationApi: path: /api/service/abixen/business-intelligence/application/** url: http://business-intelligence-service:9091/api/service/abixen/business-intelligence/application sensitive-headers: businessIntelligenceAdmin: path: /service/abixen/business-intelligence/control-panel/** url: http://business-intelligence-service:9091/service/abixen/business-intelligence/control-panel sensitive-headers: businessIntelligenceAdminApi: path: /api/service/abixen/business-intelligence/control-panel/** url: http://business-intelligence-service:9091/api/service/abixen/business-intelligence/control-panel sensitive-headers: # End of Business Intelligence microservice # Begin of Web Content microservice webContentApplication: path: /service/abixen/web-content/application/** url: http://web-content-service:9092/service/abixen/web-content/application sensitive-headers: webContentApplicationApi: path: /api/service/abixen/web-content/application/** url: http://web-content-service:9092/api/service/abixen/web-content/application sensitive-headers: webContentAdmin: path: /service/abixen/web-content/control-panel/** url: http://web-content-service:9092/service/abixen/web-content/control-panel sensitive-headers: webContentAdminApi: path: /api/service/abixen/web-content/control-panel/** url: http://web-content-service:9092/api/service/abixen/web-content/control-panel sensitive-headers: # End of Web Content microservice # End of custom module microservices resource: path: /resource/** url: http://core:9000 sensitive-headers: api: path: /api/** url: http://core:9000/api sensitive-headers: <p class="indent"> |
如何建立自己的微服務?
想要建立自己函式式微服務的開發人員可以使用通用API,有抽象介面,還必須包含部署描述符。該部署描述符檔案描述了包含哪些模組,什麼可用的靜態資源,以及控制皮膚中是否有某種配置皮膚(控制皮膚是可配置的)。下面的列表是一個微伺服器的部署描述符示例:
abixen: platform: adminSidebarItems: - name: data-source-sidebar-item title: Data Sources angularJsState: application.multiVisualisation.modules.databaseDataSource.list orderIndex: 9 iconClass: fa fa-database modules: - name: multi-visualisation angularJsNameApplication: platformChartModule angularJsNameAdmin: platformChartModule title: Multi Visualisation description: This is a multi visualisation module relativeInitUrl: /service/abixen/business-intelligence/application/multi-visualisation/html/index.html adminSidebarItems: - name: data-source-sidebar-item staticResources: - relativeUrl: /service/abixen/business-intelligence/application/business-intelligence.min.css resourcePageLocation: HEADER resourcePage: APPLICATION resourceType: CSS - relativeUrl: /service/abixen/business-intelligence/application/business-intelligence.min.js resourcePageLocation: BODY resourcePage: APPLICATION resourceType: JAVASCRIPT - relativeUrl: /service/abixen/business-intelligence/application/lib/d3.min.js resourcePageLocation: BODY resourcePage: APPLICATION resourceType: JAVASCRIPT - relativeUrl: /service/abixen/business-intelligence/application/lib/nv.d3.min.js resourcePageLocation: BODY resourcePage: APPLICATION resourceType: JAVASCRIPT - relativeUrl: /service/abixen/business-intelligence/application/lib/nv.d3.min.css resourcePageLocation: HEADER resourcePage: APPLICATION resourceType: CSS - relativeUrl: /service/abixen/business-intelligence/application/lib/angular-nvd3.min.js resourcePageLocation: BODY resourcePage: APPLICATION resourceType: JAVASCRIPT - relativeUrl: /service/abixen/business-intelligence/control-panel/business-intelligence.min.css resourcePageLocation: HEADER resourcePage: ADMIN resourceType: CSS - relativeUrl: /service/abixen/business-intelligence/control-panel/business-intelligence.min.js resourcePageLocation: BODY resourcePage: ADMIN resourceType: JAVASCRIPT <p class="indent"> |
我們可以看到,Java開發人員不必從頭開始建立整個微服務架構。Abixen平臺為你準備了現成的微服務解決方案,並可以立即開始開發函式式微服務。
相關文章
- 基於事件溯源與CDC的事件驅動微服務架構案例原始碼事件微服務架構原始碼
- 基於sanic的微服務基礎架構微服務架構
- 基於SpringCloud的微服務架構設計SpringGCCloud微服務架構
- 基於容器雲的微服務架構實踐微服務架構
- [雲原生微服務架構](十)微服務架構的基礎知識微服務架構
- 第三代微服務架構:基於 Go 的部落格微服務實戰案例,支援分散式事務微服務架構Go分散式
- 教你玩轉微服務--基於DDD的微服務架構落地實踐之路微服務架構
- 基於Redis構建微服務的反應式架構 - bitsrcRedis微服務架構
- 基於微服務架構的技術實踐(附PPT)微服務架構
- 基於 Spring Cloud 完整的微服務架構實戰SpringCloud微服務架構
- 微服務架構 | 5.2 基於 Sentinel 的服務限流及熔斷微服務架構
- 基於Nginx搭建一個安全的、快速的微服務架構Nginx微服務架構
- Java開發架構篇:領域驅動設計架構基於SpringCloud搭建微服務Java架構SpringGCCloud微服務
- 基於微服務架構開發線上教育網站微服務架構網站
- 分享Spring Cloud分散式微服務架構原始碼結構SpringCloud分散式微服務架構原始碼
- 基於 Hyperf 的 RPC 簡單微服務架構試探RPC微服務架構
- 微服務架構 | 7.1 基於 OAuth2 的安全認證微服務架構OAuth
- 阿里架構師,講述基於微服務的軟體架構模式(附資料)阿里架構微服務模式
- 微服務架構的Akka實現和Docker部署案例微服務架構Docker
- 微服務架構微服務架構
- 微服務架構 | 4.2 基於 Feign 與 OpenFeign 的服務介面呼叫微服務架構
- 微服務架構 | *3.5 Nacos 服務註冊與發現的原始碼分析微服務架構原始碼
- 微服務架構 | 4.1 基於 Ribbon 的負載均衡詳解微服務架構負載
- 基於微服務和Docker的PaaS雲平臺架構設計微服務Docker架構
- 微服務2:微服務全景架構微服務架構
- 淺談基於 Laravel 開發的 MeEdu 的微服務架構設計Laravel微服務架構
- Spring Cloud分散式微服務雲架構原始碼分析 — EurekaSpringCloud分散式微服務架構原始碼
- Quarkus和MongoDB微服務簡單案例原始碼MongoDB微服務原始碼
- 基於 Spring Cloud 的微服務腳手架SpringCloud微服務
- 微服務架構:構建PHP微服務生態微服務架構PHP
- 工商銀行基於 Dubbo 構建金融微服務架構的實踐-服務發現篇微服務架構
- 微服務架構初探微服務架構
- 慎用 “微服務” 架構微服務架構
- 基於SpringCloud的Microservices架構實戰案例-架構拆解SpringGCCloudROS架構
- 架構設計 | 基於Seata中介軟體,微服務模式下事務管理架構微服務模式
- 基於Spring Boot和Spring Cloud實現微服務架構Spring BootCloud微服務架構
- 單體架構&微服務架構&中臺服務架構架構微服務
- 微服務業務架構的探索微服務架構