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

再谈微服务

作者头像
春哥大魔王
发布2018-04-17 17:35:07
5880
发布2018-04-17 17:35:07
举报
文章被收录于专栏:服务端技术杂谈

传统方式 VS 微服务

传统开发方式遇到的问题:

  • 开发效率低:所有的开发在一个项目改代码,递交代码相互等待,代码冲突不断。
  • 代码部署难:代码功能耦合在一起,新人不知道如何下手。
  • 部署不灵活:构建时间长,任何小的修改必须重新构建整个项目。
  • 稳定性不高:一个问题往往导致整个应用挂掉。
  • 扩展性差:无法满足高并发情况下业务需求。

简单说:

微服务的目的是有效的拆分应用,实现敏捷开发部署。

官方对于微服务的定义:

  • 一系列独立服务共同组成系统;
  • 单独部署,跑在自己的进程中;
  • 每个服务为独立业务开发;
  • 分布式管理;

微服务标准:

  • 分布式服务组成系统;
  • 按照业务而不是技术划分组织;
  • 做有生命的产品而不是项目;
  • 自动化运维;
  • 容错;
  • 快速演化;

使用微服务的问题:

  • 客户端如何访问微服务;
  • 服务之间如何通信;
  • 服务多了怎么找?
  • 服务挂了怎么办?
客户端访问微服务

之前的UI和服务都是本地的,UI可以直接调用,现在按功能拆分成独立的服务,每个服务都跑着独立的虚拟机上的JAVA进程中。后台有N个服务,客户端就需要记住N个服务,一个服务下线/更新/升级,前台都需要重新部署。N个服务的调用也是不小的网络开销,用户授权管理需要统一。

所以一般在客户端和N个服务之间,建立代理或者API Gateway:

  • 提供统一服务入口,让服务对客户端透明;
  • 聚合后台服务,节省流量,提升性能;
  • 提供安全,过滤,控流等API管理功能;
服务之间如何通信

所有服务都是独立的JAVA进程跑在独立的虚拟机上,所以服务间的通信是IPC,有很多成熟的解决方案,通用的有两种方式:

  • 同步调用:
    • REST (JAX-RS,Spring Boot)
    • RPC (Thrift,Dubbo)
  • 异步消息调用(Kafka,Notify,MetaQ)

同步调用:

简单,一致性强,容易出调用问题,性能体验会差一些,调用层次多的时候可能耗时。 REST基于HTTP,更易实现,更易接受,服务端实现更加灵活,各个语言都能支持,同时能跨客户端,对客户端没有特殊要求,使用更广。 RPC有自己的优点,传输协议更高效,安全性更可控。

异步调用:

降低系统服务之间耦合,为调用之间建立缓冲,确保消息积压不会冲垮被调用方; 需要付出一致性代价,后台服务一般需要实现幂等性,因为消息发送出于性能考量一般会重复; 需要引入独立的broker,对broker分布式管理也是一个挑战;

服务多了怎么找?

一般一个服务有多份拷贝,做负载均衡。一个服务随时可能下线,也可能面临访问压力时增加新服务节点。 服务之间如何感知?服务如何管理?

  • 基于zookeeper框架实现服务注册分布式管理。
  • 客户端做:优点是架构简单,扩展灵活,只对服务注册器依赖。缺点是客户端需要维护所有调用服务地址,有技术难度,可使用Dubbo。
  • 服务端做:优点是简单,所有服务对前台调用透明,一般在小公司云服务上部署采用较多。
服务多了挂了怎么办?

单体应用风险是鸡蛋放在一个篮子中,分布式的特征是网络不可靠。所以当系统由一些列服务调用链组成的时候,必须确保任何环节不出问题而影响整个链路。手段如下:

  • 重试机制;
  • 限流;
  • 熔断;
  • 负载均衡;
  • 降级(本地缓存);

最后提到微服务离不开DevOps和Docker,理解微服务架构是核心,devops和docker是工具,是手段。

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

本文分享自 春哥talk 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 客户端访问微服务
  • 服务之间如何通信
  • 服务多了怎么找?
  • 服务多了挂了怎么办?
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档