专栏首页java达人微服务架构实践

微服务架构实践

作者:赵计刚

来源: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达人(drjava),作者:赵计刚

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-05-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 和不懂技术的产品经理共事是怎样一种体验?

    第二个是转岗。据了解有很多技术人员在工作几年后出于职业发展的考虑都会选择成为产品经理。当然,各大企业在进行产品经理招聘时给出的高薪资,也是吸引了越来越多的人加入...

    java达人
  • 以太坊:比特币+一切可能

    来源:https://medium.com/@ConsenSys/ethereum-bitcoin-plus-everything-a506dc780106

    java达人
  • 两个关于字符串的经典例子

    示例1: ==运算符 public static void test(){ String x = "hello"; String y = "world"; S...

    java达人
  • 机器学习中常用优化算法介绍

    磐创AI
  • ESP32 OTA详解-中文翻译版

    ESP32应用程序可以在运行时通过Wi-Fi或以太网从特定的服务器下载新图像,然后将其闪存到某些分区中,从而进行升级。在ESP-IDF中有两种方式可以进行空中(...

    小锋学长
  • 深层神经网络参数调优(四) ——adam算法、α衰减与局部最优

    深层神经网络参数调优(四)——adam算法、α衰减与局部最优 (原创内容,转载请注明来源,谢谢) 一、概述 本文主要讲解另外一种思想的梯度下降——adam,并...

    用户1327360
  • 今天,爱她就带她去看,美丽的Mathematica编码!

    WolframChina
  • Hadoop+Hive+HBase+Spark 集群部署(三)

    本文由 bytebye 创作 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名

    ByteBye
  • Node.js 小打小闹之Excel解析

    近期公司开始做绩效,某一天上午 HR 妹纸发了份 Excel 模板过来,让我下发给小组内成员填写。当天下午下班前,组内的绩效表就收齐了,接下来我就开始进入下一个...

    阿宝哥
  • OpenAI公布强化学习新算法,可控制复杂机器人

    近日,OpenAI 发布了一种新型的强化学习算法:近端策略优化(Proximal Policy Optimization,简称 PPO),这种算法不但在性能上比...

    AI科技大本营

扫码关注云+社区

领取腾讯云代金券