zoukankan      html  css  js  c++  java
  • 微服务设计读书笔记 (第一章 微服务)

    什么是微服务

    微服务就是一些协同工作的小而自治的服务。

    • 很小,专注于做好一件事

    ​ 微服务将单一职责这个理念应用在独立的服务上。根据业务的边界来确定服务的边界,这样就很容易确定某个功能代码应该放在哪里。而且由于该服务专注于某个边界之内,因此可以很好地避免由于代码库过大衍生出的很多相关问题。

    ​ 当考虑多小才足够小的时候,我会考虑这些因素:服务越小,微服务架构的优点和缺点也就越明显。使用的服务越小,独立性带来的好处就越多。但是管理大量服务也会越复杂

    • 自治性

    ​ 一个微服务就是一个独立的实体。服务之间均通过网络调用进行通信,从而加强了服务之间的隔离性,避免紧耦合。这些服务应该可以彼此间独立进行修改,并且某一个服务的部署不应该引起该服务消费方的变动。

    1.2主要好处

    • 技术异构性

    ​ 在一个由多个服务相互协作的系统中,可以在不同的服务中使用最适合该服务的技术。尝试使用一种适合所有场景的标准化技术,会使得所有的场景都无法得到很好的支持。

    ​ 微服务可以帮助我们更快地采用新技术,并且理解这些新技术的好处。尝试新技术通常伴随着风险,这使得很多人望而却步。尤其是对于单块系统而言,采用一个新的语言、数据库或者框架都会对整个系统产生巨大的影响。对于微服务系统而言,总会存在一些地方让我可以尝试新技术。你可以选择一个风险最小的服务来采用新技术,即便出现问题也容易处理。这种可以快速采用新技术的能力对很多组织而言是非常有价值的。

    • 弹性

    ​ 弹性工程学的一个关键概念是舱壁。如果系统中的一个组件不可用了,但并没有导致级联故障,那么系统的其他部分还可以正常运行。

    ​ 微服务系统可以改进弹性,但你还是需要谨慎对待,因为一旦使用了分布式系统,网络就会是个问题。

    • 扩展

    ​ 庞大的单块服务只能作为一个整体进行扩展。即使系统中只有一小部分存在性能问题,也需要对整个服务进行扩展。如果使用较小的多个服务,则可以只对需要扩展的服务进行扩展,这样就可以把那些不需要扩展的服务运行在更小的、性能稍差的硬件上。

    • 简化部署

    ​ 在有几百万代码行的单块应用程序中,即使只修改了一行代码,也需要重新部署整个应用程序才能够发布该变更。在微服务架构中,各个服务的部署是独立的,这样就可以更快地对特定部分的代码进行部署。

    • 与组织结构相匹配

    ​ 微服务架构可以很好地将架构与组织结构相匹配,避免出现过大的代码库,从而获得理想的团队大小及生产力。

    • 可组合性

    ​ 分布式系统和面向服务架构声称的主要好处是易于重用已有功能。在微服务架构中,系统会开放很多接口供外部使用。当情况发生改变时,可以使用不同的方式构建应用。

    • 对可替代性的优化

    ​ 使用微服务架构的团队可以在需要时轻易地重写服务,或者删除不再使用的服务。

    面向服务的架构

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

    其他分解技术

    ​ 当你开始使用微服务时会发现,很多基于微服务的架构主要有两个优势:首先它具有较小的粒度,其次它能够在解决问题的方法上给予你更多的选择。

    • 共享库

    ​ 共享库确实有其相应的应用场景。有时候你会编写代码来执行一些公共任务,这些代码并不属于任何一个业务领域,并且可以在整个组织中进行重用,很显然这些代码就应该成为可重用的库。但是你还是需要很小心,如果使用共享代码来做服务之间的通信的话,那么它会成为一个耦合点。

    • 模块

    ​ 除了简单的库之外,有些语言提供了自己的模块分解技术。它们允许对模块进行生命周期管理,这样就可以把模块部署到运行的进程中,并且可以在不停止整个进程的前提下对某个模块进行修改。模块能够提供的好处与共享库比较类似。

    没有银弹

    ​ 微服务不是免费的午餐,更不是银弹,如果你想要得到一条通用准则,那么微服务是一个错误的选择。你需要面对所有分布式系统需要面对的复杂性。尽管后面用很多的篇幅来讲解如何管理分布式系统,但它仍然是一个很难的问题。如果你过去的经验更多的是关于单块系统,那么为了得到上述那些微服务的好处,你需要在部署、测试和监控等方面做很多的工作。你还需要考虑如何扩展系统,并且保证它们的弹性。如果你发现,还需要处理类似分布式事务或者与CAP相关的问题,也不要感到惊讶!

  • 相关阅读:
    正则表达式获取远程网页
    Devexpress 常见问题
    CSS 带显示隐藏左部页面按钮
    CSS 技巧积累
    SQL 常用操作
    重置 自增字段 起始值 和 步长
    Devexpress TreeList
    Devexpress GridControl
    JS常用
    ajax跨域请求
  • 原文地址:https://www.cnblogs.com/KQNLL/p/13752295.html
Copyright © 2011-2022 走看看