微服务架构,或简称微服务,是开发软件系统的独特方法,试图专一于构建具备良好定义的接口和操做的单功能模块。近年来,随着企业变得更加敏捷并朝着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.