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

云原生之微服务

作者头像
Check King
发布2022-12-10 15:33:26
5170
发布2022-12-10 15:33:26
举报

软件架构演进

单体架构

单体架构是最简单的架构,常见于常见于传统的web开发,将前端代码和所有业务代码放在一个系统里,统一打包并运行,比如传统的J2EE应用,将代码打包成war, 部署在Jboos或tomcat容器中运行。

单体应用存在的问题主要有以下几个:

  1. 限制技术栈,比如开发语言只能是统一的。
  2. 水平扩展不容易,所有的业务逻辑统一部署,各个业务逻辑所需要的系统资源不一致情况下,扩容只能按照最耗系统资源的业务逻辑去扩容,比较浪费系统资源。
  3. 超级大应用,维护成本高,运维负责,定位问题难度大,变更不容易,编辑时间久,部署起来更费劲。

基于SOA的软件架构

SOA的架构也就是面向服务的架构,是单体架构经过水平拆分和垂直拆分的结果,按功能进行抽取代码,独立成各个服务,个服务独立部署,各个服务之间采用统一的协议进行通信。

各服务之间需要调用,引入ESB来管理项目, 可以通过webservice或rpc来实现。

SOA架构存在的问题主要有以下几个:

  1. 服务之间调用需要比较正的企业服务总线ESB。
  2. SOA更倾向于基于虚拟机或服务器来部署,每个应用都部署在不同的机器上。

基于微服务的系统架构

微服务也是一种服务化,是基于SOA进一步演进而来的更轻量级的服务化。它主要特点包括:

松耦合: 每个微服务内部都可以使用DDD(领域驱动模型)来设计,服务间尽量减少同步调用,多使用消息的方式让服务之间通过领域时间来通信。

轻量级协议:微服务之间更倾向于使用Restful风格的API, 并且各个服务可以用不同语言实现,对于性能要求极高的场景,可以使用protobuff协议。

高度自治和持续集成: 微服务可以很好的和容器化结合,微服务通过docker容器独立部署,互相独立,可以更好地进行扩容或缩容,提升了伸缩性。 并且微服务可以和devops结合,CICD和运维监控都很方便。

微服务的设计原则

前后端分离: 这样前后端分工明确,更专注与各自的分工,最终提供的服务体验更佳。

无状态服务: 将业务服务变成无状态的计算服务,专注于业务逻辑,将有状态的信息存放在DB或缓存中。

REST通信风格: 1. http天然的无状态协议,结合Json,可读性较好,如果需要安全加密,有现成的https协议可用。 2. 语言无关,大部分语言都有成熟的Restful api框架可用。3. 一些特殊场景,采用rpc框架,如grpc, thrift等。

微服务的特征

  1. 服务组件化:对服务进行组件化拆分,每个服务都独立开发、部署,可以有效避免一部分功能的修改导致整个系统重新部署或受影响。
  2. 对研发的整个生命周期负责: 微服务团队中,每个人对所开发功能的整个生命周期负责,而不是以完成代码开发为目标。
  3. 按业务组织团队: 每一个服务的开发者,既要负责数据的存储,又要负责接口的定义等各种夸专业的领域职能。 按业务拆分好团队,可以减少内耗,服务边界清晰。
  4. 去中心化治理: 整个微服务架构,通过采用轻量级的接口协议,各个业务服务本身可以结合自己业务特点选择技术栈和框架。
  5. 去中心化数据管理: 每个服务可以自行管理自己的数据库,对外提供读写接口。
  6. 基础设施自动化: 持续交付平台支撑devops过程。
  7. 容错设计:在微服务架构中,快速检测出故障源并尽可能地自动恢复服务是必须被设计考虑的,通常我们都希望在每个服务中实现监控和日志记录的组件。比如:服务状态、断路器状态、吞吐量、网络延迟等关键数据的仪表盘等。

微服务带来的问题

微服务和单体架构的对比

项目

单体架构

微服务架构

迭代速度

较慢

部署频率

不经常

频率快,可以每天发布

系统性能

吞吐量小

吞吐量大

扩展性

技术栈多样性

单一封闭

多样且开放

运维

简单

运维复杂

部署难度

容易

较难

定位问题难度

容易

困难

管理成本

主要在开发成本

服务治理和运维成本

可以看到,微服务虽然带来了好处,同时也带了了一些复杂性,包括:

  • 服务之间的调用复杂,由于分布式部署,常常成网状调用结构。
  • 多个独立数据库,事务的实现更具有挑战性。
  • 独立的服务数较多,需要有自动化的持续集成系统来支持
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 软件架构演进
    • 单体架构
      • 基于SOA的软件架构
        • 基于微服务的系统架构
        • 微服务的设计原则
        • 微服务的特征
        • 微服务带来的问题
          • 微服务和单体架构的对比
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档