第一章 微服务架构实践
2016-05-28 20:15
447 查看
一、微服务架构图:
二、技术介绍:(技术选型随着代码的编写会完成)
关于技术选型,我盗了一张我老大的微服务技术栈的图,如下:原文: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
三、基本流程:
各个服务启动的时候,都会将自己的信息注册到consulClient,consulClient将注册信息提交给consulServer,consulServer将信息提交给consulLeader(也是consulServer),consulLeader将自身的数据复制给其他的consulServer,服务注册完成!!!
APP发出一个对gatewayX-server的request,该请求先到nginx,nginx选出一台gatewayX-server的服务器进行request的处理
gatewayX-server通过myserviceA-client.jar来访问myserviceA-server的具体逻辑
首先从consulServer上拉取可用的myserviceA-server的服务器,服务发现完成!!!
根据负载均衡策略选出其中一个服务器来进行访问
访问的过程中通过熔断器来进行超时容错处理
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语言实现一个微服务的整体架构代码。
二、技术介绍:(技术选型随着代码的编写会完成)
关于技术选型,我盗了一张我老大的微服务技术栈的图,如下:原文: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
三、基本流程:
各个服务启动的时候,都会将自己的信息注册到consulClient,consulClient将注册信息提交给consulServer,consulServer将信息提交给consulLeader(也是consulServer),consulLeader将自身的数据复制给其他的consulServer,服务注册完成!!!
APP发出一个对gatewayX-server的request,该请求先到nginx,nginx选出一台gatewayX-server的服务器进行request的处理
gatewayX-server通过myserviceA-client.jar来访问myserviceA-server的具体逻辑
首先从consulServer上拉取可用的myserviceA-server的服务器,服务发现完成!!!
根据负载均衡策略选出其中一个服务器来进行访问
访问的过程中通过熔断器来进行超时容错处理
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语言实现一个微服务的整体架构代码。
相关文章推荐
- 自动备份新浪微博内容到独立域名网站
- JSP---web.xml中统一配置全站错误处理页面,提高网站的友好度
- 分布式服务器集群架构方案思考
- Contiki之MAC协议:MAC协议架构
- CodeIgniter开发实际案例-新闻网站【转】
- Spark定制班第16课:Spark Streaming源码解读之数据清理内幕彻底解密
- 网站系统的“用户登录”
- 网站xss攻击和防止
- 网站系统开发参考网址
- HA高可用
- iOS架构师之路:慎用继承
- 架构漫谈系列文章
- 网站集成QQ登录功能
- 架构设计最佳实践之Don’t Repeat Yourself
- LNMP环境网站搭建
- mysql MHA高可用测试
- 图标网站--很牛X
- Android-----官方MVP架构----示例项目解析
- 架构模式
- 密码控件安全技术浅析及攻击实例