书本资料整理

  • 本书包含了业界使用微服务的很多案例,包括Netflix、Amazon、Gilt和REA等。这些组织都发现这种架构有一个很大的好处,就是能够给予他们的团队更多的自治。
  • Erik Doernenburg 告诉我的,他认为更好的类比是城市规划师,而不是建筑师。如果你玩过 SimCity,那么你应该很熟悉城市规划师这个角色。城市规划师的职责是优化城镇布局,使其更易于现有居民生活,同时也会考虑一些未来的因素。为了达到这个目的,他需要收集各种各样的信息。规划师影响城市演化的方法很有趣,他不会直接说“在那个地方盖一栋这样的楼”,相反他会对城市进行分区。就像在 SimCity 中一样,你可能会把城市的某一部分规划成为工业区,另外一部分规划成为居民区,然后其他人会自己决定具体要盖什么建筑物。当然这个决定会受到一定的约束,比如工厂一定要盖在工业区。城市规划师更多考虑的是人和公共设施如何从一个区域移到另一个区域,而不是具体在每个区域中发生的事情。
  • Netflix 在 Cassandra 这种存储技术上有非常成熟的使用规范,并认为相比对特定的任务使用最合适的技术而言,围绕 Cassandra 来构建相关的工具和培养专家更重要。Netflix 是一个很极端的例子,他们认为可伸缩性是最重要的因素,但是通过这个例子你可以有自己的理解。

推荐书目

  • 反脆弱
  • 持续交付:发布可靠软件的系统方法
  • 修改代码的艺术
  • 领域驱动设计
  • 复杂软件设计之道:领域驱动设计
  • 实现领域驱动设计
  • 领域驱动设计精粹

推荐书目(可直接阅读)

  • 领域驱动设计精粹 - Eric Evans
  • 实现领域驱动设计 - Vaughn Vernon
  • 修改代码的艺术 - Michael C.Feathers

推荐

  • Safari Books Online

  • 在 O'Reilly 上的“微服务设计”

  • O'Reilly 网站,包含图书、培训课程、会议和新闻的信息

  • oreilly facebook

  • oreilly Twitter动态

  • oreillymedia 的YouTube视频地址

  • Eric Evans的《领域驱动设计》, 帮助我们理解了用代码呈现真实世界的重要性,并且告诉我们如何更好地进行建模。

    • 《领域驱动设计》
  • Alistair Cockburn 的六边形架构理论把我们从分层架构中拯救出来,从而能够更好地体现业务逻辑。

  • Robert C.Martin有一个对单一职责原则的论述:“把因相同原因而变化的东西聚合到一起,而把因不同原因而变化的东西分离开来。”该论述很好地强调了内聚性这一概念。

  • 澳大利亚RealEstate.com.au的Jon Eaves认为,一个微服务应该可以在两周内完全重写,这个经验法则在他所处的特定上下文中是有效的。

    • 个微服务应该可以在两周内完全重写
  • “规则对于智者来说是指导,对于愚蠢者来说是遵从。”——一般认为出自Douglas Bader
  • Heroku的 12 Factors 就是一组能够帮助你在Heroku平台上创建应用的设计原则,当然它们在其他的上下文中可能也有用。

  • 实践包括代码规范、日志数据集中捕获或者HTTP/REST作为标准集成风格等。由于实践比较偏技术层面,所以其改变的频率会高于原则。
  • 现成的商业软件

    • COTS(Commercial Off-The-Shelf,现成的商业软件)
  • ThoughtWorks

    • 全球性软件及咨询公司
  • Gilt

    • 是一个在线时尚零售商,他们就是因为这个原因而采用了微服务。2007年,他们还是一个单一的Rails应用,2009年,Gilt的系统无法解决其负载。通过将系统的核心部分抽离出来之后,Gilt在流量处理方面有了大大的改进。如今Gilt有450多个微服务,每一个服务都分别运行在多台机器上。
  • SOA

    • Service-Oriented Architecture,面向服务的架构, 是一种设计方法,其中包含多个服务,而服务之间通过配合最终会提供一系列功能。一个服务通常以独立的形式存在于操作系统进程中。服务之间通过网络调用,而非采用进程内调用的方式进行通信。
  • OSGI

    • Open Source Gateway Initiative,开放服务网关协议
  • “你总提及的那个词,它的含义与你想表达的意思并不一样。”——Inigo Montoya,电影《公主新娘》中的人物
  • Dropwizard 和 Karyon 是两个基于JVM的开源微容器。它们的运行模式相似,会自动下载一系列第三方库,这些库可以提供一些特性,比如健康检查、HTTP服务、提供指标数据接口等。这样你就有了一个可以从命令行启动的嵌入式 servlet 容器。这是一个很好的开始,但是你可以做得更多。在实际工作中,你可以使用 Dropwizard 和 Karyon 作为基础,然后根据自己的上下文加入更多的定制化特性。

标签: none