Mastering Microservices with Java-Packt Publishing(2016) 讀書筆記

Mastering Microservices with Java-Packt Publishing(2016)-ReadingNotes.md

A Solution Approach

  • ignite v. 點燃 ~ your mind as a solution architect
  • monolithic n. 單一的,整個的 (vs isomorphic)

開發環境配置

  • NetBeans IDE(如果用NodeJS的話根本不必用什麼IDE,Sublime或者VSCode足夠了)
  • Spring Boot
    • “It is better to make Jar, not War.” //我估計這都是跟Go語言學的?
    • Maven pom.xml(這個就像是NodeJS裏面的package.json)
    • Jetty允許從jar中讀取key或trusted stores內容(Tomcat不行嗎?)
    • resource model類 in POJO(Java這種靜態編譯類型語言就這麼個不好的地方!)
    • 針對controller類的annotation://太繁瑣了
      • @RestController = @Controller + @ResponseBody
      • @RequestMapping //定義url路由?
        • @RequestParam 把url查詢參數映射到controller的方法參數
        • @PathVariable 動態映射?基於正則表達式?
    • app類的標註:
      • @SpringBootApplication,其他:
        • @Configuration
        • @EnableAutoConfiguration
        • @EnableWebMvc:激活DispatcherServlet
        • @ComponentScan
    • 標註(但仍然是侵入式的):沒有xml配置,甚至不需要web.xml!
    • 運行app:
      • pom.xml目標:spring-boot:run
      • mvn clean生成jar

DDD

  • Artifacts of domain-driven design
    • 實體(具有ID的)—— 意味着在ORM裏與數據庫持久層是bind的?有必要嗎
    • 值對象(VO):immutable
    • 服務:提供行爲,沒有內部狀態(意味着只是個接口類?)
    • Aggregates(聚合)
      • aggregate root(controller類?)
      • Relationships, constraints, and invariants bring a complexity that requires an efficient handling in code.
    • Repository:與基礎架構層(文件系統/數據庫)交互
    • Factory:創建複雜對象
    • Modules
  • Strategic design and principles(管理大型企業models)
    • Bounded context(注意:系統的不同角色用戶看到的是不同上下文視圖)
    • Continuous integration
    • Context map(同樣的名稱可能出現在不同的context裏,但它們本質上是不同的models,概念細分)
      • Shared kernel(共享)
      • Customer-supplier(輸入輸出依賴)
      • Conformist(團隊之間有上下游關係?什麼鬼)
      • Anticorruption layer(隔離外部/遺留系統)
      • Separate ways(大集成?)
      • Open host service(當外部系統被多個submodels使用時,創建一個單獨的轉換層)
      • Distillation(過濾出無用信息,只保留必需的code domain concept)
  • DDD:既不是自頂向下地先做UI,也不是自底向上地先做DB設計(!)—— 我覺得這其實是在做細化的需求分析而已
    • 一開始的DDD是基於interface,而不是*Impl的嗎?
  • 實現
    • 使用in-memory倉庫來做mock測試?

實現一個微服務(OTRS?這麼喜歡用縮略語?zb)

  • controller類:構建服務endpoints
    • API版本化(*)
    • 服務類
     @Service("restaurantService")
     public class RestaurantServiceImpl extends BaseService<Restaurant, String>
         implements RestaurantService {
         ...
    
    • Repository類實現:使用JPA
  • 服務註冊與發現(SOA術語)
    • Spring Cloud provides state-of-the-art support to Netflix Eureka, a service registry and discovery tool.
  • 測試
    • RestaurantControllerTests
     @RunWith(SpringJUnit4ClassRunner.class)
     @SpringApplicationConfiguration(classes = RestaurantApp.class)
     public class RestaurantControllerIntegrationTests extends
         AbstractRestaurantControllerTests {
         ...
     }
    

部署與測試

“Spring took the opportunity to integrate many Netflix OSS projects, such as Zuul, Ribbon(客戶端LB), Hystrix, Eureka Server(服務註冊), and Turbine, into Spring Cloud.”

Ribbon用於微服務之間通信:

1. restTemplate,或:
2. @FeignClient ?

服務器端LB:“Zuul is a JVM-based router and server-side load balancer.”

* 在pom.xml中定義好依賴,然後app類上使用`@EnableZuulProxy`
	* zuul:application.yml ?

Hystrix as a circuit breaker

Monitoring:Turbine,通過RabbitMQ連接到Hystrix

部署到容器:

* 4G內存:docker-machine create -d virtualbox --virtualbox-memory 4096 default
* Building Docker images with Maven(略)

安全:OAuth 2.0

  • 啓用TLS(HTTPS)
  • OAuth 1.0 relies on security certificates and channel binding.
    • 而 2.0 “works completely on Transport Security Layer (TSL).”
  • OAuth 2.0 4種角色:
    • Resource owner(用戶自己)
    • Resource server(第3方)
    • Client(當前需要授權的頁面)
    • Authorization server(提供access tokens和refresh tokens)
  • grant types:略
  • OAuth implementation using Spring Security

消費微服務:WebApp

  • AngularJS(哈哈,哈)
  • 爲什麼這本書裏還是用的Gulp?

最佳實踐與公共原則

  • Reliability monitoring service – Simian Army(各種Monkeys)
    • “Janitor Monkey: Janitor Monkey is a service which runs in the AWS cloud looking for unused resources to clean up.”(這裏似乎不如部署Kubernetes算了)
  • Scheduler for Apache Mesos – Fenzo

故障排除指南

  • ELK
  • Use of correlation ID for service calls
發佈了396 篇原創文章 · 獲贊 68 · 訪問量 66萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章