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

漫谈微服务

作者头像
用户2937493
发布2019-09-11 17:07:56
6270
发布2019-09-11 17:07:56
举报
文章被收录于专栏:米奇爱编程米奇爱编程

前言

印象中从2016年开始“微服务”这个词逐渐为人们所熟知,那究竟什么是微服务呢?

微服务是一种软件架构风格,一种架构模式,提倡将单体应用划分为一组小的服务,服务之间互相协调,互相配合,为用户提供最终价值。

每个服务运行在其独立的进程中,服务与服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API),通信的方式应该与语言无关(C/C++/Golang/Python...),与平台无关(Windows/Linux/AIX/Android...)。

每个服务都围绕这具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。

传统单体应用存在的问题

传统三层架构图

三层架构通常包括表示层(UI),业务逻辑层以及数据访问层。主要面临的问题:

  • 维护成本高。随着应用程序功能越来越多,系统间耦合紧密,团队越来越大,相应的沟通成本,人员协调成本必然会显著增加。
  • 技术选型成本高。各业务领域需要使用相同的技术栈,难于快速应用新技术,阻碍创新。
  • 运维成本高。对应用的任何修改都必须整个应用一起部署/升级。
  • 可扩展性差。当应用负载增加时,难以水平扩展。例如有些模块对CPU要求高,有些模块对IO要求高,绑定在同一个进程里面就必须同时满足CPU密集型和IO密集型的要求,对机器要求高。
  • 一处出现问题会导致整个应用不可用。例如任务一个模块的逻辑coredump都会导致整个程序崩溃。

微服务架构的优势

微服务架构图

  • 独立性。每个服务都是独立的业务单元,能够被独立地开发、测试、构建,并且能够被直接部署。
  • 单一职责。每个服务聚焦于某个业务功能,通过清晰的边界划分,更容易被团队理解和维护。
  • 技术多样性。通过服务之间的协作以及轻量级的通信机制,组织或者团队能使用合适的语言、工具解决业务问题。

微服务的挑战

  • 分布式系统的复杂度。微服务架构是一种分布式系统,从交付的角度出发,构建分布式系统必然会带来额外的开销,例如性能(进程内通信VS跨机通信),可靠性(远程访问的可靠性),数据一致性(不同节点间数据同步问题)等等。
  • 运维成本。进程一拆为多之后,对应的部署成本和监控告警与日志采集的成本都会成倍上升。
  • 服务重构成本。传统的应用需要重构成微服务,由改造成本。
  • 服务治理相关成本。配套的服务注册与发现,服务网格,服务编排构建。

微服务其实不算是一个全新的概念,早在1996年,Gartner就提出了面向服务架构(SOA),阐述了“对于复杂的企业IT系统,应按照不同的、可重用的力度划分,将功能相关的一组功能提供者组织在一起为消费者提供服务”。既然相关的概念早就有了,那为什么微服务是最近几年才火爆起来呢?

因为抛开自动化的CI/CD,相关的服务网关,服务注册与发现 去空谈微服务是没有办法精准落地的,得益于2014年Docker的横空出世解决了应用打包问题,2016年K8S在容器编排大战中完胜Mesos和Swarm,微服务相关的生态才被完美建设起来,才有了精准落地的可行性。

微服务通信

微服务架构的本质是分布式系统,随着系统复杂度的增加以及微服务数量的增多,如何选择轻量级通信机制、完成服务和服务之间的协作和交互越发重要。这里主要比对RPC(例如Thrift),RESTful HTTP,消息队列(例如beanstalk/redis)。

RPC(远程方法调用)

REST

消息队列

通信方式

同步通信

同步通信

异步通信

平台依赖性

平台无关

语言支持

语言无关

学习成本

维护成本

如果是同步的通信方式推荐使用RESTful HTTP通信方式,轻量级,且与平台和语言无关,几乎没有学习的成本。

如果需要异步的通信方式推荐使用消息队列,生产者和消费者异步有利于提高整个系统的性能,但是需要学习消息队列的用法,并且做好选型,还需考虑消息队列的高可用等等。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 传统单体应用存在的问题
  • 微服务架构的优势
  • 微服务的挑战
  • 微服务通信
相关产品与服务
消息队列 CMQ 版
消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档