首页

来自智得网
跳转至: 导航、​ 搜索

精选文章

微服务查看全文
Java技术栈的微服务架构.png
微服务一般指一种架构思想,即把应用程序拆解为很多独立的微型组件或者服务,服务之间通过远程过程调用(RPC)或者消息的方式进行交互。

微服务架构一般会根据不同的功能模块,基于不同的业务,将系统拆分成若干个独立的进程,进程之间会通过同步RPC或者异步消息的方式进行通信。 微服务因为服务数量较多,所以一般会提供独立的网关服务提供统一的对外出口。 微服务架构相较传统的单体架构,有以下优势: 单体应用只能由单一的技术栈进行开发,而微服务架构下,可以采用混合技术栈研发的模式,每个组件可以使用自己的技术栈。 单体应用通用业务逻辑复杂,给开发带来的较高的复杂度,因为耦合的业务逻辑很容易出现变更风险,而且在发布阶段也会因为不同的功能版本耦合在一个应用中而产生更高的风险,而微服务架构下,每个组件的功能更加单一,逻辑更加简单,所以可以提升研发效率,也更方便部署运维。 微服务因为把业务逻辑打散在多个组件,所以提供更高的鲁棒性,天然实现了错误隔离,较少会出现整体不可用的情况。 原则 架构的第一性要求是简单,微服务架构存在数据一致性问题,性能消耗,维护成本高等问题,所以从单体架构迁移到微服务架构一定要有充分的推演逻辑进行支撑,比如单体架构的复杂度过高,已经不能满足后续的业务迭代,单体架构的性能出现问题,必须进行微服务拆分满足性能问题,或者单体服务在组织协助层面已经不能满足当前的需求等。 微服务的拆分可以分为水平拆分,垂直拆分,横向功能拆分等。 水平拆分主要是按照服务承担的职责进行划分,例如分为接入层,逻辑层,存储层等。 垂直拆分按照业务功能拆分为不同的微服务。 通信

微服务之间的通信可以采用Http,SOA,RPC等方式进行通信…
DDD查看全文
DDD模型拆分.png
2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称DDD。

领域驱动致力于建立领域专家,架构师,开发人员可以共同理解,可以相互交流的工具。 基本概念 实体,对事物的抽象我们有了事物类型,比如桌子,学生,狗都是我们基于这些用户的特点以及特征进行的分类,一般可以对应到程序设计中的对象类型,实体一般指某个类型下的实例,比如某个学生,那条狗,实体具有唯一性。 值对象,值对象和实体对象的区别是实体对象有唯一的ID,但是值对象一般情况下更像是通用属性的一种表达,例如学生的性别,性能虽然是客观存在的,也有具体的值,但是性别在领域中一般会通过某种实体类型来聚合,很少单独存在。再比如说地址,地址也是归属到某个具体用户才有意义,单独的地址只是一个值,具体的意义不大。 聚合根,聚合根是把一些领域内联系紧密的实体和值对象聚合在一起,统一对外提供服务。不同的聚合根之间只能跨业务子域进行通信和数据交换。但是聚合根内的实体因为归属于一个子域,所以更方便频繁的数据以及业务交互。 分层架构 DDD一般分为四层: 用户接口层 用户接口层可以对外提供多种协议,例如RPC接口,http接口或者MQ,接口层一般不强调复用,而更加强调单一职责。 应用层 应用层主要用来实现用户层定义的接口,基于充血模型实现的架构,应用层的逻辑不应该太厚,应该把逻辑下沉到领域层,应用层接口可以按照CQRS(命令查询分离)的模式来组织。 领域层

领域层包含聚合根,实体,值对象等,这些对象建议不仅仅包括字段的定义…
FAAS查看全文
FaaS 全称 Function-as-a-Service,可以理解成给 Function 提供运行环境和调度的服务。Function 一般指一个代码功能块,这个功能块具体包含的功能数量是没有限制的,但是 FAAS 要求系统的冷启动时间在毫秒数量级。

FaaS 的本质上是以程序的快速启动来实现按需运行,按需伸缩,以及高可用。Function 配合调度系统,就可以完全做到开发者对服务运行的实例无感,实现Serverless。 弹性伸缩 弹性伸缩是根据业务需求和策略自动调整计算能力(即实例数量)的能力。弹性伸缩实现了动态调度的能力,即将应用部署在合适的服务器上。 弹性伸缩一般是根据系统的访问量或者负载进行自动的调度伸缩策略,例如当函数的访问量上升时,弹性伸缩系统根据策略将函数实例数扩容,用来承载更多的请求;当系统容量过多,系统负载在低水平运行时,则适当的缩容部分实例。在传统的开发运维模式中,扩容和缩容都是较为复杂的流程。扩容需要申请服务器资源、环境配置、部署服务等流程;缩容则需要停止服务、从负载均衡服务器中剔除等。弹性伸缩能力通过将扩容和缩容流程进行自动化简化了手工运维的过程。 弹性伸缩一般通过Kubernetes实现,Kubernetes解决了弹性伸缩的基础设施的问题以及服务部署调度的问题,通过调整Deployment的副本数能帮我们解决服务实例调整的问题、通过接入HPA可以实现实例的自动伸缩问题。开源社区的Serverless/FaaS产品基本是基于k8s实现的,也正是因为k8s的发展,促进了开源社区的Serverless/FaaS产品的发展。

除了Kubernetes的HPA外,社区内还有诸如事件驱动架构弹性框架Keda…

热门分类

算法题库

精选内容