一、传统的整体式架构

传统的整体式架构都是模块化的设计逻辑,如展示(Views)、应用程序逻辑(Controller)、业务逻辑(Service)和数据访问对象(Dao),程序在编写完成后被打包部署为一个具体的应用。如图所示:

系统的水平扩展

如果要对系统进行水平扩展,通常情况下,只需要增加服务器的数量,并将打包好的应用拷贝到不同的服务器,然后通过负载均衡器(Nginx)就可以轻松实现应用的水平扩展。

整体式架构的缺点

应用复杂度增加,更新、维护困难。

易造成系统资源浪费。

影响开发效率。

应用可靠性低。

不利于技术更新。

二、面向服务的架构SOA(Service-Oriented Architecture)

SOA的思路是把应用中相近的功能聚合在一起,以服务的形式提供出去。如图所示:

缺点

虽然SOA解决了整体式架构中的问题,但多数情况下,SOA中相互独立的服务仍然会部署在同一个运行环境中。和整体式架构类似,随着业务功能的增多,SOA的服务会变得越来越复杂。本质上看,整体式架构的问题并没有因为使用SOA而变得更好。

三、微服务架构

微服务架构是一种架构风格和架构思想,它倡导我们在传统软件应用架构的基础上,将系统业务按照功能拆分为更加细粒度的服务,所拆分的每一个服务都是一个独立的应用,这些应用对外提供公共的API,可以独立承担对外服务的职责,通过此种思想方式所开发的软件服务实体就是“微服务”,而围绕着微服务思想构建的一系列结构(包括开发、测试、部署等),我们可以将它称之为“微服务架构”。如图所示:

缺点

开发人员必须处理创建分布式系统的复杂性。

部署的复杂性。

增加内存消耗。

微服务架构与SOA的区别

四、如何构建微服务架构

微服务架构的组件

(1)服务注册中心:注册系统中所有服务的地方。

(2)服务注册:服务提供方将自己调用地址注册到服务注册中心,让服务调用方能够方便地找到自己。

(3)服务发现:服务调用方从服务注册中心找到自己需要调用服务的地址。

(4)负载均衡:服务提供方一般以多实例的形式提供服务,使用负载均衡能够让服务调用方连接到合适的服务节点。

(5)服务容错:通过断路器(也称熔断器)等一系列的服务保护机制,保证服务调用者在调用异常服务时能快速地返回结果,避免大量的同步等待。

(6)服务网关:也称为API网关,是服务调用的唯一入口,可以在这个组件中实现用户鉴权、动态路由、灰度发布、负载限流等功能。

(7)分布式配置中心:将本地化的配置信息(properties、yml、yaml等)注册到配置中心,实现程序包在开发、测试、生产环境的无差别性,方便程序包的迁移。

微服务架构的技术选型

(1)微服务实例的开发:SpringBoot

(2)服务的注册与发现:Spring Cloud Eureka

(3)负载均衡:Spring Cloud Ribbon

(4)服务容错:Spring Cloud Hystrix

(5)API网关:Spring Cloud Zuul

(6)分布式配置中心:Spring Cloud Config

(7)调试:Swagger

(8)部署:Docker

(9)持续集成:Jenkins

以上就是详解Java 微服务架构的详细内容,更多关于Java 微服务架构的资料请关注脚本之家其它相关文章!

java实现的微服务架构_详解Java 微服务架构相关推荐

  1. java斐波那契查找_详解Java Fibonacci Search斐波那契搜索算法代码实现

    一, 斐波那契搜索算法简述 斐波那契搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术. 斐波那契搜索采用分而治之的方法,其中我们按照斐波那契数列对元素进行不均等 ...

  2. java object数组转实体类_详解Java中String JSONObject JSONArray List实体类转换

    JSON使用阿里的fastJson为依赖包 gradle依赖管理如下: compile group: "com.alibaba", name: "fastjson&quo ...

  3. java 判断数组已经存满_详解Java中数组判断元素存在几种方式比较

    1. 通过将数组转换成List,然后使用List中的contains进行判断其是否存在 public static boolean useList(String[] arr,String contai ...

  4. java守护线程与用户线程_详解Java线程-守护线程与用户线程

    干java 开发这么多年, 之前一直没留意java 进程还区分守护进程和用户进程.守护进程这个概念最早还是在linux系统中接触的,直到近期使用java开发心跳检测功能时,使用Timer时才发现原来j ...

  5. java产生死锁的主要原因_详解java中产生死锁的原因及如何避免

    1. Java中导致死锁的原因 Java中死锁最简单的情况是,一个线程T1持有锁L1并且申请获得锁L2,而另一个线程T2持有锁L2并且申请获得锁L1,因为默认的锁申请操作都是阻塞的,所以线程T1和T2 ...

  6. java中常量final的用法_详解Java中final的用法

    本文主要介绍了Java中final的使用方法,final是java的关键字,本文就详细说明一下它的使用方法,需要的朋友可以参考下 概念 final 具有"不可改变的"的含义,可以修 ...

  7. JAVA中创建的redis对象_详解Java在redis中进行对象的缓存

    java在redis中进行对象的缓存一般有两种方法,这里介绍序列化的方法,个人感觉比较方便,不需要转来转去. 一.首先,在存储的对象上实现序列化的接口 package com.cy.example.e ...

  8. java日期格式精确到分_详解Java日期格式化及其使用例子

    Java日期格式化及其使用例子 1 SimpleDateFormat担当重任,怎样格式化都行 import java.util.Date; import java.text.SimpleDateFor ...

  9. java中解密技术是什么_详解Java 加密解密技术的分类和归纳

    这篇文章主要介绍了Java加密解密基础分类方法汇总的相关资料,需要的朋友可以参考下 Java 加密解密基础: 密码学是研究编制密码和破译密码的技术科学.研究密码变化的客观规律,应用于编制密码以保守通信 ...

最新文章

  1. 浦发银行(600000.sh):与中国移动珠联璧合联姻
  2. Spring Boot详细学习地址转载
  3. Nagios远程监控软件的安装与配置详解
  4. docker zookeeper kafka kafka-manager 本地hbase hadoop
  5. matlab怎么重新打开新的代码,方程求解程序代码求助-程序代码修改或新的代码...
  6. DWR3.0 dwr 返回值(数组,集合,Map)
  7. ActionBar返回键图标怎么搞小点?
  8. python中安装使用模块_python 安装模块
  9. CentOS 7下配置IP地址
  10. java 设置sesion 生命周期
  11. 小故事大道理:一把小椅子
  12. 解决Redis manger 连接不上linux redis的问题
  13. Auto.js Pro安卓免ROOT引流脚本开发系列教程28网易公开课(6)-取随机话术
  14. go之无缓冲channel(通道)和有缓冲channel(通道)
  15. LeetCode - Solved Algorithms
  16. C++基础2:ASC码中 ‘A’ 和 ‘a’ 分别在什么位置??
  17. PHP新版资阁网址导航源码+网站盲盒
  18. 21个经典深度学习句间关系模型|代码技巧
  19. 运行mbedtls自带Demo ssl_client的记录
  20. 像互联网这类企业其实越晚上市对持原始股员工越有利

热门文章

  1. [ztjSQL]索引
  2. 好用的物流时效性查询API
  3. 美摄推出一键成片方案,智能化创作提升视频生产效率
  4. 优秀生活博文奖:关于专业、理想和工作的认知【评委点评】
  5. 华为鸿蒙搭载芯片,华为P50系列搭载麒麟9000系列芯片:提供鸿蒙和安卓两种版本...
  6. mysql普通查询排他锁_MySql 共享锁 排他锁
  7. Android获取通话记录的未接来电、自定义通知栏事件处理
  8. 移动端机器学习框架SNPE的使用
  9. 清除Canvas 画过的内容
  10. 计算机组成原理(四)-CPU的高速缓存