# 微服务设计java
面向服务的架构(SOA),这是一种设计方法,它所设计的系统包含多个服务,经过相互配合最终提供一系列功能。 每一个服务独立运行,经过网络调用,而不是进程之间。
这种设计咱们会有上述的好处,但也会面临各类问题!在网络中,使用什么通讯协议、服务的粒度的大小断定、中间件的选择。而后再等到动手去作时,会出现事务怎么一致啊,数据库怎么拆啊,之前的联查怎么办啊等等一系列的问题!数据库
建模服务是书中的第三章,大概讲的是建模服务的原则,总结6个字
松耦合,高内聚 遵循这个6个字,让作的微服务能达到:安全
在书中我认识了个新名词:洋葱架构 ——”由于它有不少层,而 且 当 纵 切 这 些 层 次 时, 我 只 想 哭。“ 以我目前只有2年的工做经验,我还没遇见想哭的。。。但以此自警,不要写出让人哭的东西!网络
好的集成:架构
对于上述的第二点,咱们使用的是dubbo,因此API就是接口,因此咱们的微服务并无彻底独立!当当开源的dubbox能够提供http协议的接口分布式
这是个客户下单过程微服务
协同下降耦合,须要额外的监测服务。相对编排,改动时工做量少!我的也喜欢协同模式,这让我想起了java中的观察者模式,很是方便的开发方法~性能
对于相对小点的项目,也许‘编排’开发起来更简单快捷设计
REST基于http相对低延迟的服务不如RPC,尤为是在服务端与服务端之间,但RPC要客户端和服务端代码共享,也由于代码共享,序列化和反序列化相对简单。中间件
重复的代码致使你修改时可能会漏掉某个地方。因此强制性要求,是有道理的,可是,微服务共享代码时就会致使耦合现象!
客户端库:针对上述问题,网上有不少SDK,例如百度的云存储等SDK,实际上,这些sdk可能来自社区,例如阿里的sdk不少都是经过osc悬赏开发的,他们统一API,但具体客户端实现和升级交给客户。
对读取的数据要有容错性读取,即对进来的数据,只找本身须要的,不须要的尽可能不去管。
该原则能够帮助咱们在服务方发生变化时,减小消费方修改。
考虑完集成咱们就开始分解吧!
不要为了拆分而去拆分,是为了哪部分代码抽取出去后收益最大!
各个模块分离开,安全就能提升吗?
目前在技术上最大的帮助解决了大型项依赖杂乱!
先拆分数据库,再拆服务:因事务的关系,当服务未拆分时,还能保持事务的一致性。当数据库分离的结果满意后再实施下一步
须要保持一致性的场景的服务,就尽可能在一块儿,若是避免不了也要避免使用纯技术手段去解决,而是显式的建立一个概念去表达这个事务。在此之上去补偿或最终一致事务