同源策略介紹 同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會受到影響。可以說Web是構建在同源策略基礎之上的,瀏覽器只是針對同源策略的一種實現 請求的url地址,必須與瀏覽器上的url地址處於同域上,也就 ...
一、微服務知識
技術棧
二、遠程調用(RestTemplate)
三、Eureka註冊中心
3.1搭建Eureka
1.創建eureka模塊
2.引入依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
3.在啟動類上開啟eureka註冊中心
@SpringBootApplication
//開啟eureka服務中心
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
4.配置文件(把eureka自己註冊到服務中心)
server:
port: 10086
spring:
application:
name: eureka
#eureka會將自己也註冊到eureka中,所以配置了eureka的地址信息,為了服務註冊
eureka:
client:
service-url: #eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka
5.服務中心頁面
3.2註冊
1.引入依賴
<!-- eureka客戶端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
2.編寫配置文件:引入註冊中心
eureka:
client:
service-url: #eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka
spring:
application:
name: orderservice
3.3服務發現
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
在註冊,並註入RestTemplate後,添加註解:負載均衡:@LoadBalanced
實際業務編寫:
@GetMapping("{orderId}")
public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) {
// 根據id查詢訂單並返回
Order order = orderService.queryOrderById(orderId);
String url = "http://userservice/user/"+order.getUserId();
User user = restTemplate.getForObject(url, User.class);
order.setUser(user);
return order;
}
四、Ribbon負載均衡
發起請求後,進入到負載均衡攔截器,獲取url中的服務id,然後獲取到服務列表,再根據 Irule 介面的規則選擇服務,進行url的替換,最後發起url的請求。
rule介面實現類 | 規則 |
---|---|
RoundRobinRule | 簡單輪詢服務列表來選擇伺服器。它是Ribbon預設的負載均衡規則。 |
AvailabilityFilteringRule | 對以下兩種伺服器進行忽略: (1)在預設情況下,這台伺服器如果3次連接失敗,這台伺服器就會被設置為“短路”狀態。短路狀態將持續30秒,如果再次連接失敗,短路的持續時間就會幾何級地增加。 (2)併發數過高的伺服器。如果一個伺服器的併發連接數過高,配置了AvailabilityFilteringRule規則的客戶端也會將其忽略。併發連接數的上限,可以由客戶端的 |
WeightedResponseTimeRule | 為每一個伺服器賦予一個權重值。伺服器響應時間越長,這個伺服器的權重就越小。這個規則會隨機選擇伺服器,這個權重值會影響伺服器的選擇。 |
ZoneAvoidanceRule | 以區域可用的伺服器為基礎進行伺服器的選擇。使用Zone對伺服器進行分類,這個Zone可以理解為一個機房、一個機架等。而後再對Zone內的多個服務做輪詢。 |
BestAvailableRule | 忽略那些短路的伺服器,並選擇併發數較低的伺服器。 |
RandomRule | 隨機選擇一個可用的伺服器。 |
RetryRule | 重試機制的選擇邏輯 |
4.1更換負載均衡規則
-
註入一個規則(所有的服務都符合這個規則)
-
配置文件中規定一個服務規則(可以具體到某個service)
4.2 饑餓載入
Ribbon預設是採用懶載入,即第一次訪問時才會去創建LoadBalanceClient,請求時間會很長。
而饑餓載入則會在項目啟動時創建,降低第一次訪問的耗時,通過下麵配置開啟饑餓載入:
ribbon:
eager-load:
clients: userservice
enabled: true