前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊一聊微服务

聊一聊微服务

作者头像
叔牙
发布2020-11-19 17:42:56
3710
发布2020-11-19 17:42:56
举报

聊一聊微服务

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

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上部署多个微服务。

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

总结

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PersistentCoder 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
持续集成
CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档