在游戲服務器構架中,Web服務是其中重要的部分之一,像獲取公告,游戲區列表,賬號登陸與注冊,禮包碼的使用充值等,這些都可以使用Web服務實現,快捷又方便擴展,通過簡單的配置就可以以集群的方式提供服務。 在架構設計中,最重要的一個概念就是架構必須有足夠的擴展性,可以隨着業務量的增加,可以通加增加服務器的數量來提升服務能力,以適應業務的增漲。
比如初始的構架部署是這樣的:
再過段時間,隨着業務的增漲,架構的部署是這樣的:
最后會進化為終極的部署方式,這種方式就是傳說的的微服務架構,是這樣的:
這是根據業務發展,服務器架構在不同的階段的相應的部署方式,各有自己的優缺點,但都是適應那個階段的需求的。所以在構架設計的時候,要預料到最終極的部署方式,前期可以不用實現這么復雜的功能,但是一定要為將來實現這些復雜的功能預留好擴展接口。
在目前開源的框架中,Spring Cloud 為微服務的開發提供了一套比較成熟的方案。完全適應服務的動態伸縮需求。初級架構就不用說了,基本上剛開始都是以這種方式進行開發的,在這里,為了服務的擴展,可以采用Spring Boot開發單體服務,后期需要擴展為多服務時,只需要添加Spring Cloud Gateway網關即可。
下面我們來簡單配置一下Spring Cloud Gateway的網關開發。這里使用Maven管理項目,在項目中添加group為org.springframework.cloud和artifact id為spring-cloud-starter-gateway的starter。如下面的Maven依賴所示:
<!-- 配置Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>
<!-- 配置Spring Clound 依賴管理 --><br> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version><!--注意這里面的版本,不同的版本,代碼會有一些差別 -->
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<!-- 去掉Spring boot默認的日志,使用下面配置的log4j2 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<!-- 引入log4j2的日志框架 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<!--引入spring cloud gateway-->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
注意,Spring Cloud Gateway需要Spring Boot和Spring Webflux提供的Netty的運行時環境,因此,它不可以打包成war包,也不可以在傳統的Servlet容器(比如tomcat)中運行。所以Spring Cloud Gateway項目中不能依賴
做為網關,它的首要職責就是對請求的轉發和負載。但是網關如何知道有哪些服務需要它負責管理呢?為了解決這個問題,Spring Cloud提供了一個叫服務注冊中心的服務,比較常用的有Consul,Alibaba的Nacos。它負責服務端的服務治理,包括服務注冊,服務發現,服務移除等。這里我們先使用Consul做為服務治理服務。
可以從官網下載Consul,然后使用這個命令運行(在consul所在目錄運行):
- mac或Linux命令:
./consul agent -http-port=7777 -dev -server -ui
- win 命令:.\consul.exe agent -dev -http-port=7777 -ui -server -data-dir=./data
我們先不糾結Consul的具體用法,這個以后再具體的說,或有興趣的先去查一下官方的文檔即可。在Spring Cloud Gateway中要從Consul中獲取所有的注冊服務,所以需要再添加一個服務發現的客戶端依賴
<dependency><!-- 引入Consul客戶端,用於服務發現 -->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
然后添加application.yml配置 文件,如下所示:
logging:
config: classpath:log4j2.xml
server:
port: 8080
application:
name: gateway-server
cloud:
consul:
host: localhost
port: 7777
discovery:
prefer-ip-address: true
ip-address: 127.0.0.1
register: false # 網關不需要被其它服務發現,不需要向服務中心注冊
gateway:
discovery:
locator:
enabled: true
歐萊雅男士銳能抗初老護膚套裝(元氣露+多效霜+眼霜+潔面膏50ml2+面膜10) 視黃醇緊致 洗面奶男
在啟動網關服務的時候,需要先啟動Consul服務。這樣就簡單的網關服務就搭建成功了。下回我們接着再添加網關后面的服務,使用網關實現請求的轉發。
可以從這里下載源:https://gitee.com/wgslucky/SpringCloud,需要將application.yml中的active修改為auto,讓服務在啟動的時候,加載application-auto.yml配置文件。
關注左上角公眾號,了解更多信息 