简谈微服务

微服务是一种分布式系统解决方案,推动细粒度服务的使用。
  • 1.1 什么是微服务

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

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

      • 随着产品的不断迭代,代码库会越来越庞大。以至于想要知道在什么地方做修改都很困难,尽管我们想在巨大的代码库中做到清晰地模块化,但事实上这些模块之间的界限很难维护。相似的功能代码开始在代码库中随处可见,使得修复bug或实现更加困难。
      • 在单块系统内,通常会创建一些抽象层或者模块来保证代码的内聚性,从而避免上述问题。(内聚性是指将相关代码放在一起,在考虑使用微服务的时候,内聚性这一概念很重要。)
      • 微服务将这一理念应用到独立的服务上,根据业务的边界来确定服务的边界。这样就更加容易确定某个功能应该放的位置。
    • 1.1.2 自治性

      • 一个微服务就是一个独立的实体,他可以独立的部署在PAAS(Platform As A Service 平台即服务)上,避免将多个服务部署到同一台机器上。尽管这种隔离性会 引发一些代价,但它能够大大简化分布式系统的构建,而且有很多新技术可以帮助解决这 种部署模型带来的问题。 服务之间均通过网络调用进行通信,从而加强了服务之间的隔离性,避免紧耦合。
      • 服务会暴露出 API(Application Programming Interface,应用编程接口),然后服务之间通 过这些 API 进行通信。
  • 1.2 微服务能给我带来什么好处

    • 1.2.1 技术异构性
      • 你可以使用不同的语言,比如文件存储你可以用ruby, 数据处理可以用python等等。因为每个微服务之间是独立的,对外只暴露API。
    • 1.2.2 弹性 和 扩展
      • 单块系统中,如果服务不可用,那么所有的功能都会不可用。一个功能出现瓶颈,可以会影响整个性能,你为了解决这个问题,你只能整体提升机器性能。在微服务中,你只需要提升出现瓶颈的微服务机器性能即可。也就是说,庞大的单块服务只能作为一个整体进行扩展,即使系统中只有一小部分存在性能问题, 也需要对整个服务进行扩展。
    • 1.2.3 简化部署

      • 在有几百万代码行的单块应用程序中,即使只修改了一行代码,也需要重新部署整个应用程序才能够发布该变更。这种部署的影响很大、风险很高,因此相关干系人不敢轻易做部 署于是在实际操作中,部署的频率就会变得很低。这意味着在两次发布之间我们对代码库进行了大量的修改,但直到最后一刻才将这些变更一次性发布到生产环境。这 时,另外一个问题就显现出来了:两次发布之间的差异越大,出错的可能性就更大!
      • 在微服务架构中,各个服务的部署是独立的。这样就可以更快地对特定部分的代码进行部 署。如果真的出了问题,也只会影响一个服务,并且容易快速回滚,这也意味着客户可以 更快地使用我们开发的新功能。
    • 1.2.4 对可替代性的优化

      • 如果你在大型组织工作,很多可能接触过一些前人留下的庞大而丑陋的系统。这些代码无人敢碰,却对公司业务的运营至关重要。更糟糕的是,这些程序是使用某种奇怪的 Fortran 变体编写的,并且只能运行在25 年前就应该被淘汰的硬件上。为什么这些系统直到现在 还没有被取代?其实你很清楚答案:工作量很大,而且风险很高。
      • 当使用多个小规模服务时,重新实现某一个服务或者是直接删除该服务都是相对可操作 的。想想看,在单块系统中你是否会在一天内删掉上百行代码,并且确信不会引发问题?
      • 微服务中的多个服务大小相似,所以重写或移除一个或者多个服务的阻碍也很小。使用微服务架构的团队可以在需要时轻易地重写服务,或者删除不再使用的服务。当一个 代码库只有几百行时,人们也不会对它有太多感情上的依赖,所以很容易替换它。

参考文章:微服务设计 http://www.ituring.com.cn/book/1573

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值