微服務架構,或簡稱微服務,是開發軟件系統的獨特方法,試圖專一於構建具備良好定義的接口和操做的單功能模塊。近年來,隨着企業變得更加敏捷並朝着DevOps和持續測試邁進,這一趨勢愈來愈受歡迎。微服務能夠幫助建立可擴展,可測試的軟件,能夠每週而不是每一年交付。html
微服務架構(也稱雲應用程序架構指南)java
Sam Newman:「微服務是一種小型,自主的服務,能夠協同工做。」node
Frye:微服務的想法是專一於構建可以作到一件事情的我的服務。python
Retriever Communications首席技術官Nic Grange說:「微服務是一種設計軟件系統的方法,這些軟件系統由小型獨立服務組成,每一個服務都有特定用途。」react
Flux7首席技術官Ali Hussain說:「微服務是解決大型或大型服務的一種方法 使用一組更小,更簡單的服務協同工做的複雜業務問題; 微服務運行本身獨特的流程,有助於實現整體業務目標。「ios
ShieldX Networks創始人兼首席執行官Ratinder Ahuja博士說:」微服務是一種應用程序開發方法,其中大型應用程序是做爲一套模塊化服務構建的。每一個模塊都支持一個特定的業務目標,並使用一個簡單明確的界面與其餘服務集進行通訊。「nginx
Dest Horning,Zesty.io的解決方案工程師:」微服務用於軟件工廠的製造。而不是讓一我的[或]機器建造一輛整車,每一個區域都專門完成它的任務:這個錘子鉚釘,這個塗漆。「和」微服務將一個大的物鏡分解成它的部件,而且這些部件是 獨立完成。「git
Justin Bingham,Janeiro Digital的首席技術官:」微服務是一個應用程序或更普遍的生態系統的組件,能夠獨立運行 - 每一個都負責一個特定的業務github
Chef營銷總監Michael Ducy表示:「它正在將應用程序的開發和發佈分解爲更小的工做。」web
SolarWinds的負責人Kong Yang說:「微服務是開發軟件應用程序的一種方法。由可獨立部署的模塊化服務組成。每一個微服務都運行一個獨特的流程,並經過一個明肯定義的輕量級機制(如容器)進行通訊,以實現業務目標。
「微服務容許組織減小依賴性,更快地開發和擴展.- Aviran Mordo
微服務定義:Lewis / Fowler:
「微服務之因此重要,僅僅是由於它們以簡化系統複雜性的方式增長了獨特的價值。經過將系統或應用程序拆分爲許多較小的部分,您能夠展現減小重複,增長內聚力和下降部件之間耦合的方法,從而使整個系統部件更易於理解,更具可擴展性,更易於更改。分佈式系統的缺點是從系統角度來看老是更復雜。要管理的許多小型服務的開銷是另外一個須要考慮的因素。「 - 盧卡斯克勞斯,
微服務方法是將您的系統(「一堆代碼」)分解爲許多小型服務,每一個服務一般都有本身的:
考慮這種架構風格:
須要高發布速度的大型應用。
須要高度可擴展的複雜應用程序。
具備豐富域或多個子域的應用程序。
由小型開發團隊組成的組織。
微服務設計的Sam Newman列舉了微服務的主要優勢以下:
經過由多個協做服務組成的系統,咱們能夠決定在每一個服務中使用不一樣的技術。這使咱們可以爲每項工做選擇合適的工具,而沒必要選擇更標準化,一刀切的方法,這種方法一般最終成爲最低標準。
彈性工程的一個關鍵概念是隔板。若是系統的一個組件發生故障,但該故障沒有級聯,則能夠隔離問題,系統的其他部分能夠繼續工做。服務邊界成爲您明顯的艙壁。在單一服務中,若是服務失敗,一切都會中止工做。使用單片系統,咱們能夠在多臺機器上運行以減小故障機率,可是經過微服務,咱們能夠構建處理服務徹底故障並相應下降功能的系統。
經過大型的單片服務,咱們必須將全部內容擴展到一塊兒。咱們整個系統的一小部分在性能方面受到限制,但若是這種行爲被鎖定在一個巨大的單片應用程序中,咱們必須處理全部內容。經過較小的服務,咱們能夠擴展那些須要擴展的服務,容許咱們在更小,功能更少的硬件上運行系統的其餘部分。
對百萬行單片應用程序進行單行更改須要部署整個應用程序才能發佈更改。這多是一次影響很大,風險很高的部署。在實踐中,因爲這種影響,高風險部署會被限制發生。
經過微服務,咱們能夠對單個服務進行更改,並獨立於系統的其他部分進行部署。這使咱們可以更快地部署代碼。若是確實出現問題,能夠將其快速隔離到單個服務,從而輕鬆實現快速回滾。
微服務使咱們可以更好地將咱們的架構與咱們的組織保持一致,從而幫助咱們最大限度地減小在任何一個代碼庫上工做的人數,從而達到團隊規模和生產力的最佳點。咱們還能夠在團隊之間轉移服務的全部權,以試圖讓人們在一個服務上進行並置。
分佈式系統和麪向服務的體系結構的關鍵承諾之一是咱們爲重用功能開闢了機會。經過微服務,咱們容許以不一樣方式爲不一樣目的使用咱們的功能。當咱們考慮消費者如何使用咱們的軟件時,這一點尤其重要。
若是你在一箇中等規模或更大的組織工做,你極可能會意識到坐在角落裏的一些大而討厭的遺留系統。沒有人想觸摸的那個。對您的公司如何運行相當重要的那個,但剛好用一些奇怪的Fortran變體編寫,而且僅在25年前達到使用壽命的硬件上運行。爲何沒有被替換?你知道爲何:工做太大並且冒險。
因爲咱們的個性化服務規模較小,所以使用更好的實施方案替換它們,甚至徹底刪除它們的成本更容易管理。
微服務架構下降了團隊管理的複雜性,但沒法減小團隊溝通的須要。他們須要確保一個服務中的更新不會破壞其餘功能。咱們也能夠在總體架構應用程序中找到這個問題。
咱們能夠爲不一樣的組件(多語言)選擇不一樣的技術堆棧。它致使應用程序設計和架構不一致的問題。從長遠來看,它可能會增長維護成本。
咱們須要一個成熟的Dev Ops團隊來處理維護基於微服務的應用程序所涉及的複雜性。因爲應用程序的幾個移動部分,它變得複雜而且須要高水平的專業知識。增長資源使用 - 運行這些應用程序的初始投資很高,由於全部獨立運行的組件都須要擁有更多內存和CPU的本身的運行時容器。
獨立運行的組件經過網絡相互交互。這種系統須要可靠和快速的網絡鏈接。編組和解編組 - 當一個組件須要來自另外一個組件的數據時,發送方從其內部表示中對一些標準中的數據進行編組,而接收方在使用以前將數據解組爲其本身的表示。與傳統應用程序架構相比,這確定須要更多處理。
須要保護內部服務通訊以免任何內部通訊安全漏洞。因爲有幾個移動部件,這些應用程序更容易出現安全漏洞。
與總體應用相比,此類應用的測試確定更難。
沒法使用正確的工具也是一個須要考慮的問題。
須要日誌分析工具進行日誌分析,Splunk或ELK堆棧
微服務 - 不是免費午飯! http://highscalability.com/blog/2014/4/8/microservices-not-a-free-lunch.html
維持多個微服務很是難以提升複雜性。
找到以正確方式建立微服務架構的優秀架構師是極其困難的。
白宮Web API的指南和示例,鼓勵跨應用程序的一致性,可維護性和最佳實踐。白宮API旨在平衡真正的RESTful API接口和積極的開發者體驗(DX)。
該文件大量借鑑:
在肯定應用程序中的微服務後,請根據如下條件驗證您的設計:
重用仍然是微服務設計的原則。可是,重用範圍已縮減爲業務中的特定域。設計這種重用的努力在SOA的早期階段包括在設計企業範圍的規範模型方面的浪費,由於它過於雄心勃勃而沒有結果。可是,必須注意的是,在其限制範圍內的規範模型多是有益的。與其促進的重用一致,其範圍已經減小。經過「基於優勢的重用」方法,新興模型優於預約模型。團隊能夠就通訊模型達成一致,以決定微服務如何在其設計環境以外進行調整以供使用。若是現有的微服務API不適合您的域或「業務組」,那麼構建另外一個微服務可能會更好。
-Alison Jarris
Scale Cube,由Martin L. Abbott和Michael T. Fisher定義。該模型解釋瞭如何經過實施三維方法實現無限擴展。
「可伸縮性藝術」一書描述了三維可伸縮性模型:比例立方體。微服務架構是在比例立方體上應用Y軸縮放。
• 水平復制和克隆(X軸) • 功能分解和分割 - 微服務(Y軸) • 水平數據分區 - 碎片(Z軸)
Scale Cube(圖片提供:microservices.io)
API是標準化的包裝器,它建立了一個接口,微服務能夠經過該接口進行打包和浮出水面。這使得API成爲微服務架構(如安全性,治理和重用)關鍵問題的邏輯執行點。由於API可以容納這些問題,因此它們被認爲是微服務架構(mulesoft)的基礎組件。微服務設計爲在內部使用,而API則用於向外界公開功能。
Miniservices被稱爲實用的微服務。您能夠更快地開始使用它們,並選擇對您的團隊有意義的部分。
「[miniservice]就像一組微服務在一個小模式中彙集在一塊兒。」 — Ross Garrett
每一個微服務必須處理本身的數據,miniservices能夠共享數據。「 — Arnaud Lauret
不要將架構優雅性與商業價值混爲一談。「 — Ross Garrett
利用對我有意義並得到大部分功能優點的實踐,「 says Ross Garrett.
Nanoservice是一種反模式,其服務太細粒度。nanoservice是一種服務,其開銷(通訊,維護等)超過其效用。
DDD經過將大型模型劃分爲不一樣的有界上下文並明確其相互關係來處理大型模型。 Martin fowler
微服務應該有多大:它應該有一個明肯定義的有界上下文,使咱們可以在沒必要考慮或交換上下文的狀況下工做。
全部參與服務之間的關係由單個端點描述
服務編排是參與服務的全局描述,其經過消息交換,交互規則和兩個或多個端點之間的協議來定義。編舞採用分散的方法進行服務組合。
來自stack的andrei
「咱們經過使用控制業務邏輯的上帝服務(具備全局視角)或微服務基本上傳遞消息的編排方法來解決咱們的微服務問題。在微服務架構中,編排比編舞更受歡迎。」
您是一名協調員,數據和職能的協調員。你不是改變着,請不要介入業務規則,避免搞亂其餘人的架構。
推薦的包括Saga模式,路由單和狀態工做流。每種模式都具備必定程度的複雜性。研究並將正確的模式與您的業務流程相匹配。
https://medium.com/capital-one-tech/microservices-when-to-react-vs-orchestrate-c6b18308a14c
No | about | url |
---|---|---|
1 | What are the Advantages of Microservices? - Sam Newman | - https://www.youtube.com/watch?v=KV3j3MZTXgk |
2 | Design Microservice Architectures the Right Way | - https://www.youtube.com/watch?v=j6ow-UemzBc |
3 | Mastering Chaos - A Netflix Guide to Microservices | - https://www.youtube.com/watch?v=CZ3wIuvmHeM |
4 | API Academy Microservices Boot Camp @ CA World: Designing a Microservices Architecture | -https://www.youtube.com/watch?v=iZNSPKxAd5w |
5 | Data Strategies for Microservice Architectures | - https://www.youtube.com/watch?v=n_V8hBRoshY |
6 | Refactor your Java EE application using Microservices and Containers by Arun Gupta | -https://www.youtube.com/watch?v=iJVW7v8O9BU |
7 | Principles Of Microservices by Sam Newman s | -https://www.youtube.com/watch?v=PFQnNFe27kU |
8 | PGOTO 2016 • Appsec and Microservices • Sam Newman | - https://www.youtube.com/watch?v=wlt7nCRWx_w |
9 | Avoiding Microservice Megadisasters - Jimmy Bogard | - https://www.youtube.com/watch?v=gfh-VCTwMw8 |
10 | 10 Tips for failing badly at Microservices by David Schmitz | - https://www.youtube.com/watch?v=X0tjziAQfNQ |
11 | Lessons from the Birth of Microservices at Google | - https://www.youtube.com/watch?v=Fz1PoXqxAZc |
12 | Event Sourcing You are doing it wrong by David Schmitz | - https://www.youtube.com/watch?v=GzrZworHpIk |
13 | The hardest part of microservices is your data | - https://www.youtube.com/watch?v=MrV0DqTqpFU |
14 | Data Design and Modeling for Microservices | - https://www.youtube.com/watch?v=KPtLbSEFe6c |
15 | The Art of Discovering Bounded Contexts by Nick Tune | - https://www.youtube.com/watch?v=ez9GWESKG4I |
16 | The challenges of migrating 150+ microservices to Kubernetes -Sarah Wells (Financial Times) | - https://www.youtube.com/watch?v=fgI3cOdv87I&feature=youtu.be |
17 | Revitalizing Aging Architectures with Microservices | - https://www.youtube.com/watch?v=SPGCdziXlHU |
No | about | url |
---|---|---|
1 | Developing Microservices with Aggregates Chris Richardson | - https://www.infoq.com/presentations/aggregates-modular-microservices |
2 | Top 5+ Microservices Architecture and Design Best Practices Ajitesh Kumar | - https://dzone.com/articles/top-5-microservices-architecture-and-design-best-p |
3 | Microservices: Patterns and Practices Panel C. Richardson, R. Shoup, L. Ryan, R. Tangirala, and R. Schloming participate in a discussion on microservices and the challenges faced at scale, the strategies to use and more. | -https://www.infoq.com/presentations/microservices-patterns-practices-panel |
4 | Microservices Patterns Red Hat Videos | - https://www.youtube.com/watch?v=_YzzxrSIQGw |
5 | 7 Microservice Patterns Explained (Ivar Grimstad) | - https://www.youtube.com/watch?v=4IFVBfLBl1Y |
6 | Three Microservice Patterns to Tear Down Your Monoliths | - https://www.youtube.com/watch?v=84W9iY3CwdQ |
7 | 14 Architectural patterns for microservice development | - https://www.youtube.com/watch?v=yVZS1HZrlEw |
8 | Reducing Microservices Architecture Complexity with Istio and Kubernetes | - https://www.youtube.com/watch?v=k42jqkjtYKY |
9 | Developing Microservices with Aggregates | - https://www.infoq.com/presentations/aggregates-modular-microservices |
10 | The Seven Deadly Sins of Microservices by Daniel Bryant | - https://www.youtube.com/watch?v=Jw6TYEb1Opw |
11 | Microservices Anti-Patterns | - https://www.youtube.com/watch?v=I56HzTKvZKc |
No | about | url |
---|---|---|
1 | Don’t Build a Distributed Monolith | - https://www.microservices.com/talks/dont-build-a-distributed-monolith/ |
2 | In this talk from the API360 Microservices Summit in New York, June 2016, Vijay Alagarasan of Asurion explores lessons learned and anti-patterns to avoid when implementing microservices. | - https://www.apiacademy.co/resources/videos/api360-microservices-summit-microservices-anti-patterns |
3 | Microservices Anti-Patterns | - https://vimeo.com/198927025 |
4 | Microservices Anti-Patterns | - https://vimeo.com/118020043 |
5 | API360 Microservices Summit – Microservices Antipatterns – Vijay Alagarasan, Asurion | - https://www.youtube.com/watch?v=uTGIrzzmcv8 |
6 | Stefan Tilkov - Microservices Patterns and Anti-patterns | - https://www.youtube.com/watch?v=VaYmRe104HU |
7 | 10 Tips for failing badly at Microservices by David Schmitz | - https://www.youtube.com/watch?v=X0tjziAQfNQ |
8 | 10 Tips for failing badly at Microservices by David Schmitz | -https://www.oreilly.com/library/view/microservices-antipatterns-and/9781491963937/video255789.html |
No | about | url |
---|---|---|
1 | Seven Microservices Anti-patterns | - https://www.infoq.com/articles/seven-uservices-antipatterns |
2 | Microservices Anti-patterns: It’s All About the People | - https://opencredo.com/blogs/microservices-anti-patterns-its-all-about-the-people/ |
3 | The 7 Deadly Sins of Microservices | - https://opencredo.com/blogs/7-deadly-sins-of-microservices/ |
4 | Microservices? Please, Don't | - https://dzone.com/articles/microservices-please-dont |
5 | How Anti-Patterns Can Stifle Microservices Adoption in the Enterprise | - https://blog.appdynamics.com/engineering/how-to-avoid-antipatterns-with-microservices/ |
針對與微服務基礎設施相關的公共失敗的故事彙編列表。
TBD
在考慮消費者的狀況下構建API - 做爲產品自己。
使用Collection Metaphor。
使用名詞做爲資源名稱(例如,不要在URL中使用動詞)。
使資源表示有意義。
支持對集合進行過濾,排序和分頁。
支持連接擴展關係。容許客戶端經過包含其餘表示而不是連接或擴展連接來擴展響應中包含的數據。
支持對資源的實地剪裁。容許客戶端減小響應中返回的字段數。
使用HTTP方法名稱來表示某些內容:
使用有意義的HTTP狀態代碼。
將ISO 8601時間點格式用於表示中的日期。
經過利用連接策略來考慮連通性。一些流行的例子是:
使用 OAuth2 保護您的API。
使用Content-Type協商來描述傳入的請求有效負載。
例如,假設您正在評級,包括豎起大拇指縮小和五星評級。您有一條路線能夠建立評級: POST /ratings
區分傳入數據和服務,以便肯定它是哪一種評級類型:豎起大拇指仍是五星級?
爲每種評級類型建立一條路線: POST /ratings/five_star and POST /ratings/thumbs_up
可是,經過使用Content-Type協商,咱們能夠對兩種類型使用相同的POST /評級路由。經過將請求上的Content-Type標頭設置爲Content-Type:application / vnd.company.rating.thumbsup或Content-Type:application / vnd.company.rating.fivestar,服務器能夠肯定如何處理傳入的評級數據。
版本化的演變。可是,若是是版本控制,請使用Accept標頭而不是URL中的版本控制。
考慮緩存能力。至少應使用如下響應標頭:
確保您的GET,PUT和DELETE操做都是 冪等. 操做不該產生不良反作用。
這些指南旨在支持真正的RESTful API。如下是一些例外狀況:
應使用HTTP謂詞或方法,以符合HTTP / 1.1標準下的定義。對錶示採起的行動將與正在處理的媒體類型及其當前狀態有關。如下是HTTP謂詞如何映射到特定上下文中的建立,讀取,更新,刪除操做的示例:
HTTP METHOD | POST | GET | PUT | DELETE |
---|---|---|---|---|
CRUD OP | CREATE | READ | UPDATE | DELETE |
/dogs | Create new dogs | List dogs | Bulk update | Delete all dogs |
/dogs/1234 | Error | Show Bo | If exists, update Bo; If not, error | Delete Bo |
(Web應用程序設計示例,做者:Brian Mulloy,Apigee。)
鍵中沒有值:
"tags": [ {"id": "125", "name": "Environment"}, {"id": "834", "name": "Water Quality"} ],
鍵中的值:
"tags": [ {"125": "Environment"}, {"834": "Water Quality"} ],
錯誤響應應包括常見的HTTP狀態代碼,開發人員的消息,最終用戶的消息(適當時),內部錯誤代碼(對應於某些特定的內部肯定的ID),開發人員能夠找到更多信息的連接。例如:
{ "status" : 400, "developerMessage" : "Verbose, plain language description of the problem. Provide developers suggestions about how to solve their problems here", "userMessage" : "This is a message that can be passed along to end-users, if needed.", "errorCode" : "444444", "moreInfo" : "http://www.example.gov/developer/path/to/help/for/444444, http://drupal.org/node/444444", }
使用三個簡單的常見響應代碼,表示(1)成功,(2)因爲客戶端問題致使的故障,(3)因爲服務器端問題致使的故障:
有關記錄限制和總可用計數的信息也應包含在響應中。例:
{ "metadata": { "resultset": { "count": 227, "offset": 25, "limit": 25 } }, "results": [] }
例子: http://example.gov/api/v1/magazines.json
響應體:
{ "metadata": { "resultset": { "count": 123, "offset": 0, "limit": 10 } }, "results": [ { "id": "1234", "type": "magazine", "title": "Public Water Systems", "tags": [ {"id": "125", "name": "Environment"}, {"id": "834", "name": "Water Quality"} ], "created": "1231621302" }, { "id": 2351, "type": "magazine", "title": "Public Schools", "tags": [ {"id": "125", "name": "Elementary"}, {"id": "834", "name": "Charter Schools"} ], "created": "126251302" } { "id": 2351, "type": "magazine", "title": "Public Schools", "tags": [ {"id": "125", "name": "Pre-school"}, ], "created": "126251302" } ] }
例子: http://example.gov/api/v1/magazines/[id].json
響應體:
{ "id": "1234", "type": "magazine", "title": "Public Water Systems", "tags": [ {"id": "125", "name": "Environment"}, {"id": "834", "name": "Water Quality"} ], "created": "1231621302" }
例子: Create – POST http://example.gov/api/v1/magazines/[id]/articles
響應體:
[ { "title": "Raising Revenue", "author_first_name": "Jane", "author_last_name": "Smith", "author_email": "jane.smith@example.gov", "year": "2012", "month": "August", "day": "18", "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam eget ante ut augue scelerisque ornare. Aliquam tempus rhoncus quam vel luctus. Sed scelerisque fermentum fringilla. Suspendisse tincidunt nisl a metus feugiat vitae vestibulum enim vulputate. Quisque vehicula dictum elit, vitae cursus libero auctor sed. Vestibulum fermentum elementum nunc. Proin aliquam erat in turpis vehicula sit amet tristique lorem blandit. Nam augue est, bibendum et ultrices non, interdum in est. Quisque gravida orci lobortis... " } ]
TBD
Spring Cloud爲開發人員提供了工具,能夠快速構建分佈式系統中的一些常見模式,例如配置管理,服務發現,斷路器,路由等。它構建於用Java開發人員編寫的基於Java的Netflix OSS庫之上(如今還有ali oss)。
Spring Platform自身提供的統一編程模型和Spring Boot的快速應用程序建立功能爲開發人員提供了良好的微服務開發體驗。例如,只需不多註釋,您就能夠建立一個配置服務器,只須要幾個註釋,就能夠得到客戶端庫來配置您的服務。
有大量的庫能夠解決大多數運行時問題。因爲全部庫都是用Java編寫的,所以它提供了多種功能,更好的控制和微調選項。
不一樣的Spring Cloud庫彼此很好地集成在一塊兒。例如,Feign客戶端還將使用Hystrix進行電路中斷,使用Ribbon進行負載均衡請求。一切都是註釋驅動,使Java開發人員易於開發。
Spring Cloud的一個主要優勢也是它的缺點 - 它僅限於Java。MSA的一個強大動機是可以在須要時交換技術堆棧,庫甚至語言。Spring Cloud沒法作到這一點。若是您想要使用Spring Cloud / Netflix OSS基礎結構服務,例如配置管理,服務發現或負載平衡,那麼解決方案並不優雅。Netflix Prana項目實現了邊車模式,以經過HTTP公開基於Java的客戶端庫,使得以非JVM語言編寫的應用程序能夠存在於NetflixOSS生態系統中,但它並非很是優雅。
Java開發人員須要關心和處理Java應用程序的責任。每一個微服務都須要運行各類客戶端以進行配置檢索,服務發現和負載平衡。設置它們很容易,但這並不會隱藏構建時和運行時對環境的依賴性。例如,開發人員可使用@EnableConfigServer建立一個配置服務器,但這只是一個快速的路徑。每次開發人員想要運行單個微服務時,他們都須要啓動並運行Config Server。對於受控環境,開發人員必須考慮使Config Server具備高可用性,而且因爲它能夠由Git或Svn支持,所以它們須要一個共享文件系統。一樣,對於服務發現,開發人員須要首先啓動Eureka服務器。對於受控環境,他們須要在每一個AZ等上集中多個實例。感受就像Java開發人員除了實現全部功能服務以外還必須構建和管理非平凡的微服務平臺。
單獨的Spring Cloud在微服務之旅中的範圍較短,開發人員還須要考慮自動部署,調度,資源管理,進程隔離,自我修復,構建管道等,以得到完整的微服務體驗。對於這一點,我認爲將Spring Cloud單獨與Kubernetes進行比較是不公平的,Spring Cloud + Cloud Foundry(或Docker Swarm)和Kubernetes之間的比較更公平。但這也意味着,對於完整的端到端微服務體驗,Spring Cloud必須補充一個像Kubernetes自己這樣的應用平臺。
Kubernetes是一個開源系統,用於自動化容器化應用程序的部署,擴展和管理。它是多語言,提供配置,運行,擴展和管理分佈式系統的原語。
Kubernetes是一個多語言和語言無關的容器管理平臺,可以運行雲原生和傳統的容器化應用程序。它提供的服務(例如配置管理,服務發現,負載平衡,度量收集和日誌聚合)能夠經過各類語言使用。這容許組織中的一個平臺可供多個團隊(包括使用Spring的Java開發人員)使用並用於多種目的:應用程序開發,測試環境,構建環境(運行源代碼控制系統,構建服務器,工件存儲庫)等。
與Spring Cloud相比,Kubernetes解決了更普遍的MSA問題。除了提供運行時服務以外,Kubernetes還容許您配置環境,設置資源約束,RBAC,管理應用程序生命週期,啓用自動擴展和自我修復(Kubernetes行爲幾乎就像一個能夠抵禦混亂的自愈平臺)。
Kubernetes技術基於Google 15年的研發和管理容器的經驗。此外,有近1000個提交者,它是Github上最活躍的開源社區之一。
Kubernetes是多語言,所以,它的服務和原語是通用的,並無針對不一樣的平臺進行優化,例如Spring Cloud for JVM。例如,配置做爲環境變量或已安裝的文件系統傳遞給應用程序。它沒有Spring Cloud Config提供的精美配置更新功能。
Kubernetes不是一個專一於開發人員的平臺。它旨在供具備DevOps意識的IT人員使用。所以,Java開發人員須要學習一些新概念,並樂於學習解決問題的新方法。儘管使用MiniKube啓動Kubernetes的開發人員實例很是容易,可是手動安裝高可用性Kubernetes集羣會產生大量的操做開銷。
Kubernetes仍然是一個相對較新的平臺(2年),它仍在積極開發和發展。所以,每一個版本都添加了許多可能難以跟上的新功能。好消息是已經設想了這個,而且API是可擴展和向後兼容的。
建議每一個資源在測試服務器上接受'mock'參數。傳遞此參數應返回模擬數據響應(繞事後端)。
在開發早期實現此功能可確保API表現出一致的行爲,支持測試驅動的開發方法。
注意:若是mock參數包含在對生產環境的請求中,則應引起錯誤。
「任何設計系統的組織,必然會產生如下設計結果:即其結構就是該組織溝通結構的寫照。」 - Melvin Conway(1967)。
康威定律斷言,組織不得不製做應用程序設計,這些應用程序設計是其通訊結構的副本。這一般會致使意外的摩擦點。
「逆向康威機動」建議改進您的團隊和組織結構,以促進您所需的架構。理想狀況下,您的技術架構將與您的業務架構顯示同構。
「微服務」: - 「微服務咱們主要遵循域驅動的方法,咱們的想法是創建一個跨職能的團隊。」
靈感來自於 coming soon....
此瀏覽器不支持PDF。請下載微服務IBM紅皮書PDF以查看它:Download PDF.