1. 微服务是什么?银行面试内容中出现了微服务相关的知识,经过查询后整理如下
微服务描述的对象多为互联网公司的的具体业务,淘宝中的订单服务,支付服务,物流服务为相互之间独立,彼此之间通过轻量级的通信机制进行沟通与联系。
发展历程是通过:单体架构->SOA服务化->微服务:
单体架构与SOA服务化类似于面向对象的设计的原则中的单一职责原则的由来:
其中单体架构为一个架构中模块功能较多,多个功能模块集中到一起,牵一发而动全身,一种功能的修改可能会影响到整个对外的功能不能正常运行。此种开发架构适用于小型项目,当企业规模增大就需要各个模块之间分开,方便后续扩展以及优化。
SOA(Service Oriented Architecture)"面向服务的架构” ,是一种设计方法:即为多个服务之间相互依赖最终完成系列的功能。而每个服务以独立的形式存在于 *** 作系统的进程之中。为松散耦合的结构,各个模块之间耦合程度降到最低,扩展性更好,
微服务架构与SOA架构类似,是在SOA上的升级:业务上彻底的组件化和服务化,原有的单个业务系统会拆分为多个独立开发、设计、运行的小应用。80%的SOA服务架构思想+100%组件化架构思想+80%的领域建模思想。
优点:功能模块独立,开发语言不限制,数据库独立,容错性更强,可通过自动检测机制对持续出错的功能隔离,在服务恢复的时候重新联通。
缺点:数据库独立,当一个用户请求调用不同的数据库时,跨库事务会成为复杂的内容,每个节点可能同时扮演着生产者与消费者的身份,形成了一个复杂的调用关系网,会降低功能执行效率。
2. 微服务的跨库思路针对上面微服务内容的缺点(跨库的数据库查询困难问题),提出以下几种思路,优化此种服务类型。
表结构的合理设计,尽量垂直分割
1. 当两个表依赖字段较少:字段冗余
将两个表长期依赖的表的内容冗余到每个表中,表内查询速度快于join查询,利用空间换取时间,但是会有限制:字段不能太多;数据需要同步,否则会出现脏数据的问题
2. 依赖字段较多实时性要求不高:表同步
使用ETL工具做跨库的表同步,一般来说数据库的实时性要求不太高。
3. 静态字段依赖: 数据字典表
不同库中的静态字段,建立数据字典表,保存于每个数据库中,避免跨库join查询
4. 服务层代码进行数据组装
结语通过服务查询后的数据集,通过代码进行二次封装,将此种需要经常调用的数据缓存到分布式缓存中,减小查询压力
总的来说,微服务的架构是当今时代,互联网发展,企业发展到一定量级都必须要采用的功能解决思路,其功能独立,拓展性强,松耦合的特点类似于大型企业各个部门之间的分立职责的思想,但也带来了相应的问题。功能跨库就是一个带来执行效率低下的严重问题,针对数据库的查询提出了上述4种方法,在实际采用过程中,针对实际情况随机应变,而根本在于数据库的分割,由源头来看,将各个数据库尽最大可能垂直分割,相互关联的字段尽量少,会最大程度提高微服务的跨库查询效率。以上!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)