赞
踩
一篇没有什么实质内容的文章,不过试图从比较笼统,立足点比较高的角度去解释Spring项目和微服务,以及两者的关系。
打开spring官网即可看到目前在大力开发的顶级项目:
Spring Boot官方提供的starter以spring-boot-starter-xxx
的方式命名的。官方建议自定义的starter采用xxx-spring-boot-starter
命名规则。
Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer’s own laptop, bare metal data centers, and managed platforms such as Cloud Foundry.
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化分布式系统基础设施的开发,如服务发现与注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉复杂的配置和实现原理,最终给开发者一套简单易懂、易部署和易维护的分布式系统开发工具包。
Pivotal是一家很牛逼的公司,获得EMC,VMware和通用电气(GE)的联合投资,Pivotal Cloud Foundry和VMware Photon Platform合并成单个集成式解决方案Cloud Foundry。
Dubbo是阿里开源的高性能分布式服务框架,致力于提供透明化的RPC远程服务调用方案,及SOA服务治理方案,使得应用可通过高性能RPC实现服务的输出、输入功能和Spring框架无缝集成;包含远程通讯、集群容错和自动发现三个核心部分;实现服务治理,包括服务注册,发现,调度,监控,治理等核心,支持注册中心对等集群,缓存服务,提供高可用与健壮性。大多数场景使用长连接小数据量的模式提供服务使用。
提供透明化的远程方法调用,实现像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。同时具备软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。可以实现服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
Dubbo 核心功能:
Dubbo 的功能只是 Spring Cloud 体系的一部分。Dubbo 是 SOA 时代的产物,它的关注点主要在于服务调用,流量分发、流量监控和熔断。而 Spring Cloud 诞生于微服务架构时代,考虑的是微服务治理的方方面面,另外由于依托Spring、Spring Boot的优势之上,两个框架在开始目标就不一致,Dubbo 定位服务治理、Spring Cloud 是一个生态。
仅关注于服务治理的这个层面,Dubbo 优于 Spring Cloud:
对于微服务的定义,每个人都有其理解。其中比较符合我的理解的有:
The micro-service architectural style is an approach to developing a single application as a suite[音似sweet] of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deploy-able by fully automated deployment machinery. There is a bare minimum of centralized management of these services , which may be written in different programming languages and use different data storage technologies. ——Martin Fowler and James Lewis
在我的心理模型中,我认为微服务是自包含(如容器)的轻量进程,他们通过HTTP进行通信,用相对较小的工作量与仪式来创建和部署,将只集中在有限领域的API提供给他们的使用者。——Tony Pujals
可以看出的关键点:
虽然每个人对微服务都可以有自己的理解,不过大概的标准还是有一些的:
提到微服务,言必提单体架构 Monolithic,即所有的功能打包在一个 WAR包里,基本没有外部依赖(除了容器),部署在一个JEE容器(Tomcat,JBoss)里,包含DO/DAO,Service,UI等所有逻辑。
Monolithic比较适合小项目,优点:
缺点:
提到微服务,另一个经常拿来对比的名词是SOA(Service Oriented Architect)。
微服务是一种架构风格,组件的另一种模式或实现,一个大型的系统由多个微服务组成,每个微服务可以独立部署,并且微服务间是松耦合。其中每个微服务理想情况,完成一个小的业务能力。微服务架构是以专注于单一职责的小型功能模块为子服务,一个后台服务通过RPC相互通信,去中心化,松耦合化完成复杂业务系统的设计思想。
微服务框架核心要解决或者基础设施必须要做到RPC,服务注册与发现,负载均衡,分布式配置,服务熔断机制和服务网关路由几个核心要素。
优势:
简而言之,就是开发简单,技术栈灵活,服务独立无依赖,独立按需扩展,可用性高。
劣势:
总结起来,带来维护,部署,版本控制,运营,性能监控,DevOps,分布式事务,数据一致性,服务间通信成本,系统集成测试等一些列挑战;
微服务的核心在于定义领域模型的边界,在于拆分服务;单体结构的拆分,绝不是一个容易的活。系统的拆分也是和业务强耦合的,需要业务架构师对于业务非常熟悉。
服务拆分的原则:
康威定律:设计系统的组织,其产生的设计等同于组织之内、组织之间的沟通结构。
单一职责原则
拆分的目的可以说是分层:梳理和抽取核心应用、公共应用,作为独立的服务下沉到核心和公共能力层,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
微服务的拆分力度需与具体业务相结合,总的原则是服务内部高内聚,服务之间低耦合。
软件发布
系统中经常变动的部分大约只占 20%,剩下的 80% 基本不变或极少变化,因此软件的发布周期完全不同。可以把不变的 80% 分离出来,单独部署,单独管理。这不仅有利于降低系统的复杂性,精简团队的规模,也有利于在系统发生故障的时候快速定位。如果不做这种拆分,系统在扩展的过程会浪费很多资源。
投入产出
衡量拆分收益的标准是拆分后的维护成本要低过拆分前的维护成本,也就是说不能因为拆分而带来更大的维护工作。
拆分前的维护成本 - 拆分后的维护成本 >= 0
服务的维护成本包括维护该服务所需要耗费的人力、物力和时间。如果一个系统拆分成两个或两个以上,导致所有的资源都加倍,那将会很失败。最好的结果是原来维护服务的同一套人马分成两个部分,因为拆分后服务的复杂性降低,所需要的维护资源显著减少,或者对人员能力的要求大大降低。
提到微服务离不开DevOps和Docker,理解微服务架构是核心,DevOps和DevOps是实现工具。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。