聊一聊微服务

聊一聊微服务

在这篇文章中,我们将介绍微服务,那就需要回答一个司空见惯的问题“什么是微服务?”

1

什么是微服务?

微服务是一种软件开发技术,它将应用程序构建为松散耦合服务的集合。 在微服务架构中,服务是细粒度的,协议是轻量级的。 微服务是一种架构风格,是将一个复杂的系统分解成多个更小粒度的服务单元。

“微服务 - 也称为微服务架构 - 是一种架构风格,它将应用程序构建为一组松散耦合的服务,实现业务功能。 微服务架构支持大型复杂应用程序的持续交付/部署。它还使组织能够发展其技术堆栈。“ -- Chris Richardson, Microservices.io

这是比较权威的微服务解释与定义。换句话说,微服务架构由小型和自治服务组成。 每个服务都是独立且可独立部署的,这意味着将大型应用程序分解为松散耦合的模块。

2

为何选择微服务?

以下是基于微服务架构设计应用程序的一些优点:

  1. 技术异构性 - 不同的服务可以用几种技术(即Java,Node.js,Ruby,.Net等)实现,并与每种技术进行通信。
  2. 故障隔离 - 与单体架构式应用相比,微服务中更容易隔离故障。 例如内存泄漏,数据库复制的问题等。
  3. 扩展 - 应用程序的利用率每天都在迅速增加,同时导致性能下降并导致应用程序扩展。 它可以是水平扩展或垂直扩展。
  4. 易于部署 - 如果负载很高,部署单片应用程序需要花费更多时间,有时需要花费数小时才能部署并随时可用,但微服务是由小型,高度分离的服务组成,专注于执行小任务,为促进模块化系统建设提供了方法。
  5. 优化可替换性 - 服务可以使用自己的架构或技术运行,与单个业务功能保持一致,因此它们只执行一项功能。为了更改或替换或弃用服务,可以优化并且不会花费太多时间来开发内部或各种技术的服务,并且不会影响其他服务。
  6. 云支持 - 云改变了IT支持业务的方式。 一个结构良好的云平台可以从混合的私有/公共云生态系统中获取服务。 通过基于微服务的方法来促进组织的流程需求,尝试解决问题变得更加容易。

3

微服务面临的挑战

微服务比传统系统更复杂。 反过来,环境变得更加复杂,因为服务必须管理,保护,监控和支持。

  1. 流程改进 - 为了利用微服务的交付速度,组织应采用敏捷开发流程,持续集成,自动化QA检查,自动化交付渠道。
  2. 增加了微服务需要多次部署以及更多失败场景的概率。
  3. 多点部署意味着需要资源,硬件和工程资源稀缺且昂贵。 当有数百或数千个微服务时,团队如何确定优先级?
  4. 迁移 - 将单体应用迁移到微服务体系结构需要确定微服务的正确边界,并且此过程很复杂。
  5. 使用微服务架构方式,需要提出了几个问题:
  • 如何评估是否应该允许将代码拆分迁移到不同的服务?
  • 如何监控整体系统健康状况并尽早发现潜在的问题?
  • 版本如何控制?
  • 如何分析分布式应用程序中的大量日志数据?
  • 如何监控微服务的性能?

4

微服务架构

以下是微服务的相对高层次的抽象概述:

5

微服务通信

微服务之间的通信可以设置为同步或异步方式。 通常,微服务使用广泛采用的轻量级协议(如HTTP和REST)或消息传递协议(如JMS或AMQP)相互通信。 在特定情况下,可以选择更优化的通信协议,例如Thrift,gRpc或Dubbo等。

仅用一种方法开发系统是不合理的。根据具体场景需求需要两种方式组合使用。原则上,异步方法非常适合微服务,但是,尝试将所有内容建模为异步会导致复杂的系统设计。

6

微服务基础设施

为了实现微服务可伸缩性和可用性,可以将一个微服务部署在一个或多个虚拟机(VM)或物理机中。 如果服务简单且流量较小,则可以在一个VM上部署多个微服务。

对于云服务架构,开发人员无需担心服务的运行位置。服务将部署在云服务器中,基础架构可自行管理部署。如果发起包含数百个微服务,云服务架构是最佳选择。

总结

在这篇文章中,我们对微服务有了基本的了解。 我们了解构建微服务的微服务和核心原则是什么。 我们在使用这些服务时涵盖了架构以及面临的挑战。

本文分享自微信公众号 - PersistentCoder(TyphoonChan),作者:叔牙

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 服务熔断与降级

    在某个小乡镇的某个银行柜台,只有一个窗口办理业务,后边很多人在排队,业务办理很慢,突然间办理业务的电脑坏了、或者说工作人员午休或下班了,后边排队等待办理...

    叔牙
  • jdk源码分析之HashMap--为什么key不建议是可变对象

    接着之前的文章,我们死磕HashMap的每一个细节和用法。我们都知道创建HashMap的时候如果不指定类型,默认是HashMap<Object,Obje...

    叔牙
  • springboot(8)-热部署

    spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动...

    叔牙
  • 2018年微服务将疯狂至死?带你领略不一样的思维历程!

    原文作者:Dave Kerr;原文地址:https://www.jdon.com/49261

    Java后端技术
  • 看完这几点,你就会知道微服务为什么这么火爆了

    微服务体系的发展并不是一蹴而就的,经过了2014年前后的低潮期,微服务概念顶层的泡沫逐渐褪去,那些真正能够在企业落地的实践在一轮又一轮的大浪淘沙后被甄别、沉淀。...

    技术zhai
  • 关于使用微服务架构的一些思考

    在单体应用时代,我们把所有的业务模块都写在一个系统内,随着新功能的增加,系统的代码库会越来越大,以至于想要知道该在什么地方做修改都很困难。虽然系统内划分了模块,...

    会跳舞的机器人
  • 对微服务的一些思考

    在过去的这几年内,微服务已经成为一种非常重要的软件架构趋势。微服务架构并不是一种全新的软件实现形式,它是多种在以前比较成功的软件设计思想的集大成者。比如它里面其...

    黑光技术
  • 微服务设计 10 大反模式和陷阱!

    O’Reilly的电子书《Microservices AntiPatterns and Pitfalls》讲述了在微服务设计实现时十种最常见的反模式和陷阱。本文...

    Java技术栈
  • 不是银弹:关于微服务的一点思考

    在 reddit 上看到一篇文章(被标题吸引了) Monoliths are the future——作者在吐槽微服务。

    linjinhe
  • 拆解交易系统--性能优化,安全加固与弹性扩缩容

    前几篇文章我们拆解了交易系统架构层次的设计方案,对于代码细节我们讨论很很少,今天基于几个方面简短的介绍一下,未来有时间可以针对性的进行扩展讲解。

    春哥大魔王

扫码关注云+社区

领取腾讯云代金券