微服务核心技术梳理

作者: 索伦x | 来源:发表于2019-03-24 09:44 被阅读105次

学习本文前,请确保你了解并搭建过至少一个简单的微服务应用。对微服务的设计理念及编程思想有一定的了解。

当我们需要自己从零开始设计或搭建微服务项目的时候,由于缺乏经验及高人指点,心中难免有些惶恐。我们要如何去搭建我们的微服务项目?如果不能一步到位的话,我们该如何逐步去实施?微服务系统会存在哪些常见问题?有哪些风险点需要去关注?微服务的边界在哪里,哪些东西可以用微服务来实现,哪些不能?

那么本文讲从易到难、从浅到深、逐步实现从实用到四高的相关技术梳理(高可能、高性能、高并发、高智能)。让你在微服务项目的各个阶段都能够不慌不忙,胸有成竹的构建及完善我们的微服务项目

1.微服务最少组件

当我们对微服务的四高没什么要求的时候,仅仅是想将项目拆分成多个团队并行开发,那我们要如何去搭建我们的微服务项目呢?

以dubbo微服务框架为例:
我们至少需要有api网关、zk、provider、consumer

2.微服务编排

当我们对微服务项目进行拆分的时候,该如何下手,怎么拆分才是正确的? 有没有统一的标准?

目前业内对微服务的拆分并没有统一的规范及标准,拆分的时候必须根据具体的业务及开发团队现状来确定。下面我们以一个旅游微服务系统平台实例来进行说明:

RPC依赖关系图

从上图我们不难看出一些基本的编排规则:

  1. 微服务不能交叉调用,否则上线的时候可能会出现服务不可用的问题
  2. 微服务可以是独立的、不依赖其他任何服务的
  3. 微服务必须进行分层,低层级的不能调用高层级的微服务
  4. 微服务的交互方式,必须提前设计好,是同步还是异步?
    比如: 消息通知最好用MQ异步来实现,否则会影响诸如订单主流程的运行

3.微服务排障

当我们在线运行的微服务项目频繁出现Bug,又无法快速准确的定位的时候,我们需要对微服务项目进行哪些升级改造?

以Dubbo微服务框架为例,常见的使用zipkin来进行调用链的跟踪:


zipkin

在zipkin的图形管理界面上,很容易能看到调用链故障环境
ELK日志系统通过对日志的监控及分析,也可以帮我们快速定位故障


ELK日志监控界面

4.微服务的高并发

当微服务项目在线运营一段时间后,总会迎来流量的高峰,那我们应该提前做好哪些准备来应对高并发的用户场景呢?

  1. 利用Nginx进行前后端分离,请静态资源部署在NG上
  2. 接入云存储,把图片、视频、app安装包等发布到云存储上
  3. 把云存储、静态资源全部接入CDN,并做好相应的策略
  4. 充分利用Redis等缓存层,减轻数据库的压力

5.微服务高可用

当个别微服务偶尔出现问题影响用户体验的时候,比如偶尔用户无法下单、无法支付,又或者我们需要频繁升级的时候,我们应该采取什么样的措施?

  1. 负载比较高的服务,相同的开启多个
  2. 上线发布的时候,采用灰度发布的方式
  3. 打开错误重试机制,dubo默认重试3次

6.微服务的高性能

当一个项目用户越来越多、业务越来越复杂、我们该如何保证在复杂的业务场景下,实现对用户请求的快速响应?

  1. 数据库开启一主多从,把查询量大的微服务单独分配到从库上
  2. 利用Mycat等服务中间件,实现对数据库主从自动切换
  3. 利用MapReduce算法,都任务进行分片处理,统一结果汇总
  4. 利用多库进行数据库水平拆分,也就是我们常说的分库分表
  5. 把查询量大的服务采用NoSQL数据库(例如:ES)进行部署

7.微服务的分布式事务

当多个微服务同时处理一个用户请求的时候,比如用户下单需要同时调用权限系统、商品管理系统、进销存系统、支付系统等微服务,如果保证数据的一致性?而且失败的时候还必须同时回滚?

常见的分布式事务有2种

  1. 补偿机制,利用定时任务检查数据是否需要回滚
  2. 强事务,利用mysql的xa事务(也可以使用各种中间件:比如阿里的FESCAR)
#mysql实现XA事务的SQL语句
XA START 'xatestx','XXXXXXXXXXXXXXXXXXXXXXXX';
INSERT INTO suoron_test (id,name) VALUES(21,'试试');
XA END 'xatestx';
XA PREPARE 'xatestx';
#大家都准备好了,一块提交
XA COMMIT 'xatestx';
XA ROLLBACK 'xatestx';
XA RECOVER;

8.微服务服务治理

当我们团队越来越大的时候,我们需要把系统交付给运维的兄弟进行维护,我们该如何帮忙他们制定专门的运维管理的规则?

微服务治理

常见的服务治理框架有:

  1. Dubbo的Admin -- 服务管理
  2. Spring cloud 的hystrix -- 熔断
  3. zabbix -- 微服务监控及巡检
  4. apollo -- 携程配置管理(后期服务器配置全由运维负责)

9.微服务的高智能

当系统出现问题,或者资源不够的时候,每次需要手工去维护显然不现实,人工处理的响应速度太慢,恢复一个故障可能需要长达几个小时的时间,那我们该如何实行系统的智能运行?

必须充分利用容器集群及容器调度系统(例如:Kubernetes)
比如:微服务出现严重故障时,容器能够自动重启
当请求流量增大的时候自动开启新的微服务
当流量减少时,自动释放资源,用于资源消耗严重的报表统计等

相关文章

  • 微服务核心技术梳理

    学习本文前,请确保你了解并搭建过至少一个简单的微服务应用。对微服务的设计理念及编程思想有一定的了解。 当我们需要自...

  • 微信支付踩坑系列之微信支付申请流程

    概念梳理 普通微信支付:自有微信公众号(服务号或者企业号,并且必须通过企业认证;订阅号,通过微信认证【仅支持政府或...

  • 线程

    Java 并发编程:线程池的使用 Java 并发编程:线程池的使用java 多线程核心技术梳理 (附源码) 本文对...

  • Java核心技术梳理-泛型

    一、引言 在学习集合的时候我们会发现一个问题,将一个对象丢到集合中后,集合并不记住对象的类型,统统都当做Objec...

  • 微信支付踩坑系列之服务商申请流程

    概念梳理 服务商是指有技术开发能力的第三方开发者为普通商户提供微信支付技术开发、营销方案,即服务商可在微信...

  • 微服务测试方法

    微服务测试总结梳理

  • ajax的学习笔记

    ajax的核心技术是XMLHttpRequest对象,用于通过javascript从服务器取得XML数据,XHR对...

  • Git核心技术:在Ubuntu下为Gitolite添加管理端

    博客原文地址 在之前章节已经完成了服务端的配置,可以访问Git核心技术:在Ubuntu下部署Gitolite服务端...

  • 微课梳理

    我微课的课题是:逆龄肌肤养成记 知识点:皮肤基础知识 内容:皮肤知识及护肤关键词 解决用户痛点:效果性 帮助用户提...

  • 【APM】分布式链路追踪

    微服务架构作为云原生核心技术之一,提倡将单一应用程序划分成一组小的服务(微服务),服务之间互相协调、互相配合,为用...

网友评论

    本文标题:微服务核心技术梳理

    本文链接:https://www.haomeiwen.com/subject/oxlgeqtx.html