마이크로 서비스 설계, 분할 원칙 -AFK

A, AKF 분할 원리

  업계는 확장 가능한 시스템 아키텍처에 대한 간단한 디자인 컨셉을 가지고 : 용량 및 가용성 시스템을 추가하여 문제를 해결할 수 있습니다.

  물론 적대감에 정면의 개념을 미친 인기 오늘날 클라우드 컴퓨팅의 개념은 널리 빠르게 성장하는 크기, 용량 및 성능 문제에 대한 시스템을 인정 받고 있습니다. 그러나 시스템의 크기의 앞으로 성장,뿐만 아니라 성능과 용량의 문제에 직면 할뿐만 아니라, 시스템 기능의면에서 성장과 분화 제공하는 사업의 문제와 변화의 복잡성을 가지고 모듈 시간의 수를 가져 서비스의 질문입니다.

  그러나 많은 시스템 아키텍처는 서비스 제공 능력에 영향을 미치는 규범을 시스템 재구성에 이르는, 이러한 문제를 충분히 고려 될 수 있도록 설계뿐만 아니라 인간과 재정 자원의 낭비. 이 "확장 성 예술,"책은 시스템 확장 성 모델 --AKF 확장 입방 (확장 성 큐브)를 제안했다.

1, Y는 서로 다른 서비스에 기초하여 스플리터 (기능) 관심 애플리케이션 기능 분할 축

  Y 축 확장이 여러 서비스에 큰 모 놀리 식 애플리케이션 될 것입니다 각은 주문 관리, 고객 관리 등의 관련 기능의 집합을 구현합니다. 이러한 전자 상거래 플랫폼에 대한 일반적인 시나리오를 엔지니어링에서 서비스 지향 아키텍처 (SOA)는, 우리는 다음과 같은 스키마의 구성과 유사한 다른 서비스로 분할 할 수 있습니다 :

,

  그러나 서비스의 수의 증가는, 서비스 호출 관계가 복잡지도에서 찾을 수 있습니다, 시스템에 새로운 기능을 추가, 호출 할 서비스의 수는 서비스 관리에 혼란을 주도, 통제되고, 일반적으로의 경우 다음, 우리는 지배 구조의 서비스에 서비스 게이트웨이를 형성하는 서비스 등록을위한 메커니즘이 필요

(2) X 축 (수평 스케일)는 "가속 문제를 해결한다."수평 스케일링에 관한, 또는

  X 축 및 서비스의 절대 평등에 의해, 이전 간단한 아이디어가 동일 확장 및 주소 용량 및 가용성 문제로 데이터를 복사, 사실, 마이크로 서비스의 여러 인스턴스를 실행할 플러스 클러스터 모드로로드 밸런싱을하는 것입니다.

  하나의 서비스의 이용 용량을 향상시키기 위하여, 각각의 서비스는 X 축 연장 분할된다.

(3) Z 축 (데이터 분할)을 팔로우 서비스 데이터, 지리적 분할 우선 순위

  일반적으로 요청자 또는 사용자 고유의 요구에 기초하여 상기 Z 축 팽창 지칭 시스템은 분할되고, 절연하지만 그대로 밖으로되도록 서브 시스템을 분할. 예에 자동차 공장의 생산 : 순서 포드 자동차 회사는 중국에서 사업을 개발, 또는 중국의 값싼 노동력, 중국에서 완전한 하위 공장의 설립을 활용하고, 전체 자동차 생산에 대한 책임 공장과 미국. 이것은 Z 축 확장이다.

工程领域常见的Z轴扩展有以下两种方案

1,单元化架构

  在分布式服务设计领域,一个单元Cell就是满足某个分区所有业务操作的自包含闭环。如上面我们说到的Y轴扩展的SOA架构。客户端对服务端节点的选择一般是随机的,但是,如果在此上加Z轴扩展,那服务节点的选择将不再是随机的,而是每个单元自成一体。

2,数据分区

  为了性能数据安全上的考虑,我们将一个完整的数据集按一定维度划分出不同的子集。一个分区(Shard),就是整体数据集的一个子集。比如用尾号来划分用户,那同样尾号的那部分用户就可以认为是同一个分区,数据分区一般包括以下几种数据划分形式:

  数据类型:如业务类型

  数据范围:如时间段、用户ID

  数据热度:如用户活跃度、商品热度

  按读写分:如商品描述、商品库存

二、前后端分离原则

  何为前后端分离?前后端本来不就是分离的吗?这要从jsp开始讲起。分工精细化从来都是蛋糕做大的原则,多个领域工程师最好在不需要接触其他领域知识的情况下合作,才能使效率越来越高,维护也会变得简单。jsp的模板技术融合了html和java代码,使得传统MVC开发中的前后端如胶似漆,前端做好页面,后端转成模板,发现问题再找前端,前端又看不懂java代码,前后端分离的目的就是打破这尴尬的局面,我们需要的是一个全能的团队,而不是一个个全能的人。

  前后端分离原则,简单的将就是前端和后端的代码分离,我们推荐的模式是最好采用物理分离的方式部署,进一步促使更彻底的分离。如果继续使用服务端模板技术,如jsp,把java、js、css、html都堆到一个页面里,稍微复杂一点的页面就无法维护了。

这种前后端分离有几个好处:

1,前后端技术分离,可以由各自的专家来对各自的领域进行优化,这样前端的用户体验会更好。

2,分离模式下,前后端交互界面更清晰,就剩下接口模型,后端接口简介明了,更易于维护。

3,前端多渠道继承场景更容易实现,后端服务无需变更,采用统一的数据和模型,可以支持多个前端,例如:微信h5前端、PC前端、安卓前端、IOS前端。

三、无状态服务

  对于无状态服务,首先说一下什么是状态:如果一个数据需要被多个服务共享,才能完成一笔交易,那么这个数据被称为状态。进而依赖这个状态的服务被称为有状态的服务,反之成为无状态服务。

  这个无状态服务原则并不是说在微服务架构里不允许存在状态,表达的真实意思就是要把有状态的业务服务改变为无状态的计算类服务,那么状态数据也就相应的迁移到对应的“有状态数据服务”中。

  场景说明:例如我们从前在本地内存中建立的数据缓存、Session缓存,到现在微服务架构中就应该把数据迁移到分布式缓存中存储,让业务服务变成一个无状态的计算节点。迁移后,就可以做到按需动态伸缩,微服务应用在运行时动态增删节点,就不再需要考虑缓存数据如何同步的问题。

四、RestFul通讯风格

  这里介绍一个“无状态通讯原则”-Restful通讯风格,它有许多优点:

1,无状态协议HTTP,具备先天优势,扩展能力强,例如安全加密有成熟的https。

2,JSON报文序列化,轻量简单,人与机均可读,学习成本低,搜索引擎友好。

3,语言无关,各大热门语言都提供成熟的Restful API框架,相对一些其他RPC框架生态更加完善。

发布了19 篇原创文章 · 获赞 149 · 访问量 80万+

추천

출처blog.csdn.net/truelove12358/article/details/103179256