微服务的简单介绍

一、单体应用的缺点html

1)部署效率低下java

2)协做开发成本高spring

3)系统高可用性能差数据库

4)线上发布变慢json

二、微服务的简单介绍后端

2.1)将一个单一应用程序,按照业务拆分呢为一组小型服务.api

2.2)每一个服务只作一件事,每一个服务运行在本身的进程中安全

2.3)服务之间经过轻量级的通讯机制(httprestapi)服务器

2.4)每一个服务都可以独立的部署网络

2.5)每一个服务甚至能够拥有本身的数据库

2.6)微服务以及微服务架构的是二个彻底不一样的概念。微服务强调的是服务的大小和对外提供的单一功能,而微服务架构是指把一个一个的微服务组合管理起来,对外提供一套完整的服务

三、微服务的优势

①:每一个服务足够小,足够内聚,代码更加容易理解,专一一个业务功能点(对比传统应用,可能改几行代码须要了解整个系统)

②:开发简单,一个服务只干一个事情。(加入你作支付服务,你只要了解支付相关代码就能够了)

③:微服务可以被2-5我的的小团队开发,提升效率(你应该能够想象咱们那时的情况。若是一次上线超过五我的参与的话,就会常常出现各类问题:有的人忘记提交代码、有的人忘记打包、有的人忘记修改工程依赖到最新版本。一次上线过程须要反复确认,耗费了大量精力,严重影响了总体的开发和部署效率。)

④:服务松耦合,每一个服务都可以开发部署。

⑤:先后段分离,做为java开发人员,咱们只要关系后端接口的安全性以及性能,不要去关注页面的人机交互(H5工程师)根据先后端接口协议,根据入参,返回json的回参

⑥:一个服务可用拥有本身的数据库。也能够多个服务链接同一个数据库

四、微服务的缺点

①:增长了运维人员的工做量,之前只要部署一个war包,如今可能须要部署成百上千个war包

②:服务之间相互调用,增长通讯成本

③:数据一致性问题(分布式事物问题)

④:系能监控等..

五、springcloud的技术论坛

http://springcloud.cn/

https://springcloud.cc/spring-cloud-dalston.html

六、CAP理论

**Consistency(一致性):**多节点数据数据一致

**   Availability(可用性):**用户能够选择向G1或G2发起读操做。不论是哪台服务器,只要收到请求,就必须告诉用户,究竟是v0仍是v1,不然就不知足可用性

**Partition tolerance(分区容错性):**大多数分布式系统都分布在多个子网络。每一个子网络就叫作一个区(partition)。分区容错的意思是,区间通讯可能失败(因为网路缘由)。好比,一台服务器放在北京,另外一台服务器放在上海,这就是两个区,它们之间因为网络抖动缘由致使不能通讯

6.一、Consistency和Availability的矛盾一致性和可用性,为何不可能同时成立?

答案很简单,由于可能通讯失败(即出现分区容错),若是保证G2的一致性,那么G1必须在写操做时,锁定G2的读操做和写操做。只有数据同步后,才能从新开放读写。锁按期间,G2不能读写,没有可用性不。若是保证G2的可用性,那么势必不能锁定G2,因此一致性不成立。综上所述,G2没法同时作到一致性和可用性。系统设计时只能选择一个目标。若是追求一致性,那么没法保证全部节点的可用性;若是追求全部节点的可用性,那就无法作到一致性。

6.二、取舍策略
CAP三个特性只能知足其中两个,那么取舍的策略就共有三种:

CA without P:若是不要求P(不容许分区),则C(强一致性)和A(可用性)是能够保证的。但若是若是在分布式的架构下,P是避免不了的。

CP without A:若是不要求A(可用),至关于每一个请求都须要在服务器之间保持强一致,而P(分区)会致使同步时间无限延长(也就是等待数据同步完才能正常访问服务),一旦发生网络故障或者消息丢失等状况,就要牺牲用户的体验,等待全部数据所有一致了以后再让用户访问系统。设计成CP的系统其实很多,最典型的就是分布式数据库,如Redis、HBase等。对于这些分布式数据库来讲,数据的一致性是最基本的要求,由于若是连这个标准都达不到,那么直接采用关系型数据库就好,不必再浪费资源来部署分布式数据库。

AP wihtout C:要高可用并容许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每一个节点只能用本地数据提供服务,而这样会致使全局数据的不一致性。这其实就是先在 A(可用性)方面保证系统能够正常的服务,而后在数据的一致性方面作了些牺牲,虽然多少会影响一些用户体验,但也不至于形成用户购物流程的严重阻塞。

6.三、总结 现现在,对于多数大型互联网应用的场景,主机众多、部署分散,并且如今的集群规模愈来愈大,节点只会愈来愈多,因此节点故障、网络故障是常态,所以分区容错性也就成为了一个分布式系统必然要面对的问题。那么就只能在C和A之间进行取舍。但对于传统的项目就可能有所不一样,拿银行的转帐系统来讲,涉及到金钱的对于数据一致性不能作出一丝的让步,C必须保证,出现网络故障的话,宁肯中止服务,能够在A和P之间作取舍。

相关文章
相关标签/搜索