微服务架构实践

作者:赵计刚

来源:http://www.cnblogs.com/java-zhao/p/5538232.html(点击文末阅读原文前往)

一、微服务架构图:

二、技术介绍:(技术选型随着代码的编写会完成)

关于技术选型,我盗了一张我老大的微服务技术栈的图,如下:原文http://www.jianshu.com/p/2da6becfb019

 我将会用到上图中的如下技术

  • 服务注册和服务发现:consul

  • 服务健康检查:consul

  • 配置管理:consul、archaius

  • 集群容错:hystrix

  • 计数监控:codahale-metrics、java-statsd-client、hystrix-dashboard、turbine、statsd、graphite、grafana

  • 服务路由:ribbon

  • 服务通信:retrofit、AsyncHttpClient(不选择okhttp,是因为okhttp性能比较差)

  • 文档输出:swagger

  • 日志统计:logback+ELK

  • 简化代码:lombok

  • 消息队列:rabbitmq

  • 分布式锁:redis实现和consul实现

  • 本地缓存:guava cache

  • 链路跟踪:zipkin、brave

  • 基本技术:springboot

  • 安全鉴权:auth2、openId connect

  • 自动化构建与部署:gitlab + jenkins + docker + k8s

三、基本流程:

  1. 各个服务启动的时候,都会将自己的信息注册到consulClient,consulClient将注册信息提交给consulServer,consulServer将信息提交给consulLeader(也是consulServer),consulLeader将自身的数据复制给其他的consulServer,服务注册完成!!!

  2. APP发出一个对gatewayX-server的request,该请求先到nginx,nginx选出一台gatewayX-server的服务器进行request的处理

  3. gatewayX-server通过myserviceA-client.jar来访问myserviceA-server的具体逻辑

    1. 首先从consulServer上拉取可用的myserviceA-server的服务器,服务发现完成!!!

    2. 根据负载均衡策略选出其中一个服务器来进行访问

    3. 访问的过程中通过熔断器来进行超时容错处理

  4. gatewayX-server通过myserviceB-client.jar来访问myserviceB-server的具体逻辑同3

说明:如果仅仅只是前边这样的流程或者以前边这样的流程为基础并且myserviceB-server要调用myserviceA-server,那么上图中的myserviceB-server中的整个myserviceA-client.jar可以去掉,原因是gatewayX-server已经引入了myserviceA-client.jar。

如果不是上边的流程,只是单纯的myserviceB-server要访问myserviceA-server,那么需要引入myserviceA-client.jar。

注意:对于服务发现而言,consulServer会通过gossip协议将服务器数据广播给各个本地consul agent(通常是consulClient),所以我们不需要做本地缓存,当被调用服务的服务器列表发生改变时,会马上广播给consulClient。

在后续的代码编写过程中,会逐步通过java语言实现一个微服务的整体架构代码。

java达人

ID:java_daren

(长按识别)


                                   

友情推荐

漫话五大名著

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值