第一章 微服务架构实践

1、微服务架构图:java

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

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

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

  • 服务注册和服务发现: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
  • 安全鉴权:auth二、openId connect
  • 自动化构建与部署:gitlab + jenkins + docker + k8s

3、基本流程:spring

  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。docker

若是不是上边的流程,只是单纯的myserviceB-server要访问myserviceA-server,那么须要引入myserviceA-client.jar。缓存

注意:对于服务发现而言,consulServer会经过gossip协议将服务器数据广播给各个本地consul agent(一般是consulClient),因此咱们不须要作本地缓存,当被调用服务的服务器列表发生改变时,会立刻广播给consulClient。安全

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

相关文章
相关标签/搜索