From c6272c54497f59dddfa256bad12fd1a6861b7335 Mon Sep 17 00:00:00 2001 From: wentch <22250530@qq.com> Date: Fri, 8 Jan 2016 17:13:28 +0800 Subject: [PATCH] --- redkale.html | 130 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 109 insertions(+), 21 deletions(-) diff --git a/redkale.html b/redkale.html index af9efeb0b..c34983a99 100644 --- a/redkale.html +++ b/redkale.html @@ -74,15 +74,12 @@

      在早期用户量很少或者开发、调试环境中只需部署一个进程就可满足需求。

      如上图,所有模块的HttpServlet、Service与Source数据库操作全部署在一起。 application.xml作简单的配置即可:

-
<application port="5050">   
-    
+            
<application port="5050">       
     <server protocol="HTTP" port="6060" root="root"> 
         <services autoload="true" />  
         <servlets autoload="true"/>
-    </server> 
-    	
-</application>
-                
+ </server> +</application>

      2、多点部署

@@ -91,7 +88,6 @@

      如上图,两个进程间的Serivce都是本地模式,两者会通过SNCP服务保持数据同步,若DataSource开启了数据缓存也会自动同步。两套的配置文件相同,配置如下:

 <application port="5050">   
-
     <resources>	
         <group name="ALL">
             <node addr="192.168.50.110" port="7070"/>
@@ -112,8 +108,7 @@
     <!-- SNCP 监听 Server -->
     <server protocol="SNCP" port="7070"> 
         <services autoload="true"  groups="ALL"/>
-    </server>
-	
+    </server>	
 </application>

@@ -122,8 +117,7 @@

      如上图,对HttpServlet与Service进行了分离。每个接入层的Service都是远程模式,业务层只需提供SNCP供远程调用。

      接入层中每个进程的配置相同,配置如下:

-
<application port="5050">   
-
+            
<application port="5050">  
     <resources>	
         <group name="ALL">
             <node addr="192.168.50.110" port="7070"/>
@@ -141,11 +135,9 @@
         <servlets autoload="true" />
     </server> 
 	
-</application>
-                
-

      业务层中每个进程的配置相同,置如下:

-
<application port="5050">   
-
+</application>
+

      业务层中每个进程的配置相同,配置如下:

+
<application port="5050">  
     <resources>	
         <group name="ALL">
             <node addr="192.168.50.110" port="7070"/>
@@ -156,17 +148,113 @@
     <!-- SNCP 监听 Server -->
     <server protocol="SNCP" port="7070"> 
         <services autoload="true"  groups="ALL"/>
-    </server>
-	
-</application>
-                
+ </server> +</application>

      4、微服务部署

-

      在生产环境需要避免单点问题,一个服务一般会部署多套。在此做个简单的容灾部署,最前端部署一个nginx作反向代理和负载均衡服务器,后面部署两套系统。

+

      当用户量和发帖量增加到上百万的时候,明显地将所有模块的服务部署到一个进程里是不行的。 因此需要将Service服务都独立部署形成微服务架构。

+

      如上图,将Serivice都独立部署并进行容灾部署,当然如果有需要,Servlet之间、Source都可以各自分离独立部署。不同类型的Service之间都是远程模式调用。

+

      接入层中每个进程的配置相同,配置如下:

+
<application port="5050">   
+    <resources>	
+        <group name="USER_SERVICE">
+            <node addr="192.168.50.110" port="7070"/>
+            <node addr="192.168.50.111" port="7070"/>
+        </group>
+        <group name="NOTIFY_SERVICE">
+            <node addr="192.168.50.120" port="7070"/>
+            <node addr="192.168.50.121" port="7070"/>
+        </group>
+        <group name="FORUM_SERVICE">
+            <node addr="192.168.50.130" port="7070"/>
+            <node addr="192.168.50.131" port="7070"/>
+        </group>
+    </resources>
 
+    <!-- HTTP 监听 Server -->
+    <server protocol="HTTP" port="6060" root="root"> 
+        <!-- 前端配置了nginx,需要配置才能获取客户端真实的IP地址 -->
+        <request>
+            <remoteaddr value="request.headers.X-RemoteAddress"/>
+        </request>
+        <services autoload="true">	
+            <service value="org.redkale.demo.UserService" groups="USER_SERVICE"/>
+            <service value="org.redkale.demo.NotifyService" groups="NOTIFY_SERVICE"/>
+            <service value="org.redkale.demo.ForumService" groups="FORUM_SERVICE"/>
+        </services>
+        <servlets autoload="true" />
+    </server> 	
+</application>
+

      用户模块UserService服务群中各个进程的配置相同,配置如下:

+
<application port="5050">  
+    <resources>	
+        <group name="NOTIFY_SERVICE">
+            <node addr="192.168.50.120" port="7070"/>
+            <node addr="192.168.50.121" port="7070"/>
+        </group>
+        <group name="FORUM_SERVICE">
+            <node addr="192.168.50.130" port="7070"/>
+            <node addr="192.168.50.131" port="7070"/>
+        </group>
+    </resources>
 
+    <!-- SNCP 监听 Server -->
+    <server protocol="SNCP" port="7070"> 
+        <services autoload="true">	
+            <service value="org.redkale.demo.NotifyService" groups="NOTIFY_SERVICE"/>
+            <service value="org.redkale.demo.ForumService" groups="FORUM_SERVICE"/>
+        </services>
+        <servlets autoload="true" />
+    </server> 	
+</application>
+

      通知模块NotifyService服务群中各个进程的配置相同,配置如下:

+
<application port="5050">  
+    <resources>	
+        <group name="USER_SERVICE">
+            <node addr="192.168.50.110" port="7070"/>
+            <node addr="192.168.50.111" port="7070"/>
+        </group>
+        <group name="FORUM_SERVICE">
+            <node addr="192.168.50.130" port="7070"/>
+            <node addr="192.168.50.131" port="7070"/>
+        </group>
+    </resources>
+
+    <!-- SNCP 监听 Server -->
+    <server protocol="SNCP" port="7070"> 
+        <services autoload="true">	
+            <service value="org.redkale.demo.UserService" groups="USER_SERVICE"/>
+            <service value="org.redkale.demo.ForumService" groups="FORUM_SERVICE"/>
+        </services>
+        <servlets autoload="true" />
+    </server> 	
+</application>
+

      帖子模块ForumService服务群中各个进程的配置相同,配置如下:

+
<application port="5050">  
+    <resources>	
+        <group name="USER_SERVICE">
+            <node addr="192.168.50.110" port="7070"/>
+            <node addr="192.168.50.111" port="7070"/>
+        </group>
+        <group name="NOTIFY_SERVICE">
+            <node addr="192.168.50.120" port="7070"/>
+            <node addr="192.168.50.121" port="7070"/>
+        </group>
+    </resources>
+
+    <!-- SNCP 监听 Server -->
+    <server protocol="SNCP" port="7070"> 
+        <services autoload="true">	
+            <service value="org.redkale.demo.UserService" groups="USER_SERVICE"/>
+            <service value="org.redkale.demo.NotifyService" groups="NOTIFY_SERVICE"/>
+        </services>
+        <servlets autoload="true" />
+    </server> 	
+</application>
+
+

appplication.xml 配置说明

<?xml version="1.0" encoding="UTF-8"?>
 <!--