目录
前言
本文总结了java开发中的一些高级技术。
架构相关技术
一、docker容器
docker介绍
为了更好地将软件从一个环境移植到另一个环境上,解决因环境问题导致的软件运行问题。
第一种方案是使用虚拟机,虚拟机可以运行一个虚拟的其他操作系统,可以在不同环境安装统一的虚拟系统来实现环境的统一。但虚拟机存在缺陷,占用资源多、运行步骤冗余、运行速度慢等问题。
另一种方案是使用Linux容器,容器解决了虚拟机的缺陷,Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。实现占有资源少、资源利用率高、运行速度快的有点。
Docker属于Linux容器的一种封装。
docker与VM区别
VM:使用Hypervisor提供虚拟机的运行平台,管理每个VM中操作系统的运行。每个VM都要有自己的操作系统、应用程序和必要的依赖文件等。
Docker容器:使用Docker引擎进行调度和隔离,提高了资源利用率,在相同硬件能力下可以运行更多的容器实例;每个容器拥有自己的隔离化用户空间。
docker三大要素
- 镜像:Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像可以用来创建Docker容器,用户可以使用设备上已有的镜像来安装多个相同的Docker容器。
- 容器:镜像创建的运行实例,Docker利用容器来运行应用。每个容器都是相互隔离的、保证安全的平台。我们可以把容器看做是一个轻量级的Linux运行环境。
- 镜像仓库:集中存放镜像文件的地方。用户创建完镜像后,可以将其上传到公共仓库或者私有仓库,需要在另一台主机上使用该镜像时,只需要从仓库上下载即可。
docker组成
- Docker客户端(Docker Client)
- Docker服务端(Docker Server)
- Docker仓库(Docker Registries)
- Docker 对象(Docker Objects)
二、drools规则引擎
drools规则引擎介绍
drools规则引擎可视化
windows下搭建drools workbench(可视化配置)及drools语法
规则引擎介绍
规则引擎,全称为业务规则管理系统,英文名为BRMS(即Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模板编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理。
Drools介绍
drools是一款由JBoss组织提供的基于java语言开发的开源规则引擎,可以将复杂且多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在文件或特定的存储介质中(如存放在数据库中),使得业务规则的变更不需要修改项目代码、重启服务器就可以在线上环境立即生效。
可以采用Workbench进行Rule的可视化管理。
drools官网:https://www.drools.org
drools中文网:https://www.drools.org.cn
Drools使用例子
Drools可以配置规则,解决类型上图多种规则且规则频繁变动的情况,不需重启系统。
三、Sofa
SOFA企业应用框架介绍
SOFA是蚂蚁金服自主研发的产品级分布式微服务架构。拥有一整套分布式微服务各个组件(注册中心、熔断降级、分布式任务等等)。是应对高复杂性应用架构的解决方案。其设计原则是在高内聚,低耦合,可扩展,易理解大的指导思想下,尽可能的贯彻OO的设计思想和原则。
整个应用层划分为三个大的层次,分别是App层,Domain层和Repostiory层。
- App层主要负责获取输入,组装context,做输入校验,发送消息给领域层做业务处理,监听确认消息,如果需要的话使用MetaQ进行消息通知;
- Domain层主要是通过领域服务(Domain Service),领域对象(Domain Object)的交互,对上层提供业务逻辑的处理,然后调用下层Repository做持久化处理;
- Infrastructure层主要包含Repository,Config和Common,Repository负责数据的CRUD操作,这里我们借用了盒马的数据通道(Tunnel)的概念,通过Tunnel的抽象概念来屏蔽具体的数据来源,来源可以是MySQL,NoSql,Search,甚至是HSF等;Config负责应用的配置;Common是一写工具类;负责message通信的也应该放在这一层。
结构图
四、SpringCloud分布式管理中间件
SpringCloud分布式管理中间件(Eureka注册中心、Ribbon负载均衡、Feign接口代理、Hystrix降级熔断、Zucl网关)
Eureka注册中心
Eureka服务注册与发现,提供了一个服务注册中心、服务发现的客户端。用于·服务治理,可以实现服务调用、负载均衡、容错等。
Spring Cloud封装了Netflix 公司开发的Eureka模块来实现服务治理。
Ribbon负载均衡器
Ribbon是一个客户端负载均衡器,我们可以在配置文件中Load Balancer后面的所有机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,我们也很容易使用Ribbon实现自定义的负载均衡算法。
Feign接口代理
Feign是Spring Cloud提供的声明式、模板化的HTTP客户端, 它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。
Feign默认集成了Ribbon,所以Fegin默认就实现了负载均衡的效果。
Hystrix降级熔断
服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。
服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback(退路)错误处理信息。这样,虽然提供的是一个有损的服务,但却保证了整个系统的稳定性和可用性。
在分布式环境中,不可避免地会出现某些依赖的服务发生故障的情况。Hystrix是这样的一个库,它通过添加容许时延和容错逻辑来帮助你控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点,阻止跨服务的级联故障,并提供了退路选项,所有这些都可以提高系统的整体弹性。
Zucl网关
zuul是spring cloud中的微服务网关。
网关: 是一个网络整体系统中的前置门户入口。请求首先通过网关,进行路径的路由,定位到具体的服务节点上。
Zuul是一个微服务网关,首先是一个微服务。也是会在Eureka注册中心中进行服务的注册和发现。也是一个网关,请求应该通过Zuul来进行路由。
Zuul网关不是必要的。是推荐使用的。
使用Zuul,一般在微服务数量较多(多于10个)的时候推荐使用,对服务的管理有严格要求的时候推荐使用,当微服务权限要求严格的时候推荐使用。