This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/incubator-servicecomb-website.git


The following commit(s) were added to refs/heads/master by this push:
     new f3bc294  improve content (#87)
f3bc294 is described below

commit f3bc294f096bc4cec54bf16917bd756d551f2d0b
Author: zhengyangyong <yangyong.zh...@huawei.com>
AuthorDate: Mon May 21 17:45:52 2018 +0800

    improve content (#87)
    
    Signed-off-by: zhengyangyong <yangyong.zh...@huawei.com>
---
 ...-05-17-easy-build-microservice-system-part-I.md |  87 ++++++++++++++-------
 assets/images/scaffold/ArchetypeProjects.png       | Bin 0 -> 105537 bytes
 assets/images/scaffold/BoundedContext.png          | Bin 0 -> 81453 bytes
 assets/images/scaffold/EventStorming.png           | Bin 634632 -> 28699 bytes
 assets/images/scaffold/MicroserviceDesign1.png     | Bin 0 -> 2999 bytes
 assets/images/scaffold/MicroserviceDesign2.png     | Bin 0 -> 6771 bytes
 assets/images/scaffold/MicroserviceDesign3.png     | Bin 0 -> 16885 bytes
 assets/images/scaffold/MicroserviceDesign4.png     | Bin 0 -> 22324 bytes
 8 files changed, 58 insertions(+), 29 deletions(-)

diff --git a/_posts/cn/2018-05-17-easy-build-microservice-system-part-I.md 
b/_posts/cn/2018-05-17-easy-build-microservice-system-part-I.md
index 1f460b6..4f5f690 100644
--- a/_posts/cn/2018-05-17-easy-build-microservice-system-part-I.md
+++ b/_posts/cn/2018-05-17-easy-build-microservice-system-part-I.md
@@ -60,48 +60,77 @@ java -jar xxxx.jar
 
 ServiceComb Java Chassis提供的脚手架具备更明显的优势:
 1. 
对每一种编程模型都提供了对应的[Archetypes项目](https://github.com/apache/incubator-servicecomb-java-chassis/tree/master/archetypes),包括SpringMVC、JAXRS、POJO和Spring
 Boot Starter;
+
 2. 生成的项目除了在POM中自动添加必要的依赖,还会提供Producer和Consumer示例代码(Hello World);
+
 3. 不久后会进一步提供**Edge Server**、**Authcation 
Server**等更贴近业务的脚手架项目,让用户能快速构建体系完整的微服务系统。
 
-什么叫一个完整的微服务系统呢?我们可以拿一个具体的场景做例子,会更有感觉:
+前面牛刀小试中展示的一键构建微服务,正是基于它们:
+
+![ArchetypeProjects](/assets/images/scaffold/ArchetypeProjects.png)
+
+那么什么叫一个完整的微服务系统呢?我们可以拿一个具体的场景做例子,会更有感觉:
 
 ### 场景:地产CRM
 
您经营着一家房地产开发商,销售房产,迫切需要一套销售系统,考虑到微服务的优势,您决定使用微服务的方式构建系统;主要的业务流程也非常简单:用户前来购买购买产品(房产),首先需要登记用户信息,并缴纳一定数量的定金,待交易当日,挑选心仪的产品(房产),支付尾款,完成交易。
 
 #### 使用DDD指导地产CRM系统的设计
-微服务系统的设计自然离不开DDD(Domain-Driven Design),它由Eric 
Evans提出,是一种全新的系统设计和建模方法,这里的模型指的就是领域模型(Domain 
Model)。领域模型通过聚合(Aggregate)组织在一起,聚合间有明显的业务边界,这些边界将领域划分为一个个界限上下文(Bounded 
Context)。Martin 
Fowler对它们都有详细的[解读](https://martinfowler.com/tags/domain%20driven%20design.html)。
+微服务系统的设计自然离不开DDD(Domain-Driven Design),它由Eric 
Evans提出,是一种全新的系统设计和建模方法,这里的模型指的就是领域模型(Domain 
Model)。领域模型通过聚合(Aggregate)组织在一起,聚合间有明显的业务边界,这些边界将领域划分为一个个限界上下文(Bounded 
Context)。Martin 
Fowler对它们都有详细的[解读](https://martinfowler.com/tags/domain%20driven%20design.html)。
 
 理论概念都搞清楚了,那么怎么来找模型和聚合呢?一个非常流行的方法就是[Event 
Storming](https://en.wikipedia.org/wiki/Event_storming),它是由Alberto 
Brandolini发明,经历了DDD社区和很多团队的实践,也是一种非常有参与感的团队活动:
 
 ![EventStorming](/assets/images/scaffold/EventStorming.png)
 
-通过持续讨论和反复改进后,我们就能够将业务面(也可以称为问题域)清晰的梳理出来:
+上图就是我们对地产CRM这个场景使用Event Storming探索的结果,现在我们能够将限界上下文清晰的梳理出来:
 
-![EventStormingResult](/assets/images/scaffold/EventStormingResult.png)
+![BoundedContext](/assets/images/scaffold/BoundedContext.png)
+
+>提示:Event Storming是一项非常有创造性的活动,也是一个持续讨论和反复改进的过程,不同的团队关注的核心域(Core 
Domain)不同,得到的最终结果也会有差异。我们的目的是为了演示完整的微服务系统构建的过程,并不涉及商业核心竞争力方面的探讨,因此没有Core 
Domain和Sub Domain之类的偏重。
 
 #### 将分析成果转化为方案域设计
-当我们完成所有的界限上下文的识别,可以直接将它们落地为微服务:
-
-![system-components](/assets/images/scaffold/SystemComponents.png)
-
-各微服务所包含的功能(即对应的命令和事件)如下:
-1. 前端UI服务:用户交互界面;
-2. Edge服务:很多时候也被称为API网关(API Gateway),负责集中认证、动态路由等等;
-3. 
用户服务:提供用户信息管理服务,这里保存这用户的账号和密码,负责登录和认证;同时由于房产是非常昂贵的产品,交易前需要收取一定的定金,因此每一个用户都会保存已缴纳的定金金额;
-4. 产品(资源)服务:提供产品管理服务,保存着房产的信息诸如价格、是否已售出等信息;
-5. 支付服务:提供交易时支付服务,模拟对接银行支付购房尾款;
-6. 交易服务:提供产品交易服务,它通过编排调用将整个交易流程串起来,交易服务中有两个流程:
-  6.1. 定金支付
-  Step1:通过用户服务验证用户身份;
-  Step2:通过支付服务请求银行扣款;
-  Step3:通过用户服务增加用户账号内的定金。
-  后面两个步骤需要保证事务一致性。  
-  6.2. 购房交易
-  Step1 :通过用户服务验证用户身份;
-  Step2 :通过资源服务确定用户希望购买的资源(房产)尚未售出;
-  Step3 :通过资源服务标记目标资源(房产)已售出;
-  Step4 :通过用户服务从用户账号中扣除定金;
-  Step5 :通过支付服务请求银行扣剩下的尾款;
-  最后三个步骤需要保证事务一致性。  
-
-从下一篇文章开始,我们将和您一起轻松愉快的开启构建之旅,敬请期待!
\ No newline at end of file
+当我们完成所有的限界上下文的识别后,可以直接将它们落地为微服务:
+
+![MicroserviceDesign1](/assets/images/scaffold/MicroserviceDesign1.png)
+
+1. 用户服务:提供用户信息管理服务,这里保存这用户的账号和密码,负责登录和认证;
+2. 产品(房产)服务:提供产品管理服务,保存着房产的信息诸如价格、是否已售出等信息;
+3. 支付服务:提供交易时支付服务,模拟对接银行支付定金,以及购房时支付尾款;
+
+由于完成一笔交易是一个复杂的流程,与这三个微服务都有关联,因此我们引入了一个复合服务——交易服务:
+
+![MicroserviceDesign2](/assets/images/scaffold/MicroserviceDesign2.png)
+
+4. 交易服务:提供产品交易服务,它通过编排调用将整个交易流程串起来,交易服务中有两个流程:
+- 定金支付
+
+    Step1:通过用户服务验证用户身份;
+
+    Step2:通过支付服务请求银行扣款,增加定金账号内的定金;
+
+- 购房交易
+
+    Step1:通过用户服务验证用户身份;
+
+    Step2:通过资源服务确定用户希望购买的资源(房产)尚未售出;
+
+    Step3:通过资源服务标记目标资源(房产)已售出;
+
+    Step4:通过支付服务请求扣减定金账号内的定金,以及银行扣剩下的尾款;
+
+    最后两个步骤需要保证事务一致性,其中Step4包含两个扣款操作。  
+
+之后,我们引入Edge服务提供统一入口:
+
+![MicroserviceDesign3](/assets/images/scaffold/MicroserviceDesign3.png)
+
+5. Edge服务:很多时候也被称为API网关(API Gateway),负责集中认证、动态路由等等;
+
+>提示:Edge服务需要依赖服务注册-发现机制,因此同时导入了ServiceCenter。
+
+最后还需要提供UI:
+
+![MicroserviceDesign4](/assets/images/scaffold/MicroserviceDesign4.png)
+
+6. 前端UI(同样以微服务方式提供):用户交互界面;
+
+至此,DDD设计地产CRM的工作就结束了,从下一篇文章开始,我们将和您一起轻松愉快的开启代码构建之旅,敬请期待!
\ No newline at end of file
diff --git a/assets/images/scaffold/ArchetypeProjects.png 
b/assets/images/scaffold/ArchetypeProjects.png
new file mode 100644
index 0000000..a897467
Binary files /dev/null and b/assets/images/scaffold/ArchetypeProjects.png differ
diff --git a/assets/images/scaffold/BoundedContext.png 
b/assets/images/scaffold/BoundedContext.png
new file mode 100644
index 0000000..5bf089f
Binary files /dev/null and b/assets/images/scaffold/BoundedContext.png differ
diff --git a/assets/images/scaffold/EventStorming.png 
b/assets/images/scaffold/EventStorming.png
index 5c0e2b7..ccc5bf9 100644
Binary files a/assets/images/scaffold/EventStorming.png and 
b/assets/images/scaffold/EventStorming.png differ
diff --git a/assets/images/scaffold/MicroserviceDesign1.png 
b/assets/images/scaffold/MicroserviceDesign1.png
new file mode 100644
index 0000000..774b7f7
Binary files /dev/null and b/assets/images/scaffold/MicroserviceDesign1.png 
differ
diff --git a/assets/images/scaffold/MicroserviceDesign2.png 
b/assets/images/scaffold/MicroserviceDesign2.png
new file mode 100644
index 0000000..7525315
Binary files /dev/null and b/assets/images/scaffold/MicroserviceDesign2.png 
differ
diff --git a/assets/images/scaffold/MicroserviceDesign3.png 
b/assets/images/scaffold/MicroserviceDesign3.png
new file mode 100644
index 0000000..5d6fcf0
Binary files /dev/null and b/assets/images/scaffold/MicroserviceDesign3.png 
differ
diff --git a/assets/images/scaffold/MicroserviceDesign4.png 
b/assets/images/scaffold/MicroserviceDesign4.png
new file mode 100644
index 0000000..8d2bf70
Binary files /dev/null and b/assets/images/scaffold/MicroserviceDesign4.png 
differ

-- 
To stop receiving notification emails like this one, please contact
ningji...@apache.org.

Reply via email to