[TOC]
# 第一周的學(xué)習(xí)的工作報告
## day1_學(xué)習(xí)微服務(wù)的框架開發(fā)指引:cmpay quick starter
## 微服務(wù)結(jié)構(gòu)的基礎(chǔ)了解
### 1.? 什么是微服務(wù)架構(gòu)?
? ? 在了解什么是微服務(wù)架構(gòu)之前,我先聯(lián)想到的是我之前接觸過的一些架構(gòu).一開始在我剛學(xué)習(xí)Java的時候,我們所做的項目是直接把應(yīng)用整體進行打包部署的.具體的樣式的話,像java就是打成war包部署在tomcat上,然后是springboot的話是可以打成jar包的.
? ? 微服務(wù)架構(gòu)則是將單個的整體應(yīng)用程序分割成更小的項目關(guān)聯(lián)的獨立的服務(wù)缅糟。一個服務(wù)通常實現(xiàn)一組獨立的特性或功能,包含自己的業(yè)務(wù)邏輯和適配器。各個微服務(wù)之間的關(guān)聯(lián)通過暴露api來實現(xiàn)诬辈。這些獨立的微服務(wù)不需要部署在同一個虛擬機挟憔,同一個系統(tǒng)和同一個應(yīng)用服務(wù)器中琼稻。
###2. 為什么需要微服務(wù)架構(gòu)?
? 單一架構(gòu)模式在項目初期很小的時候開發(fā)方便幻馁,測試方便庇配,部署方便尼夺,運行良好尊残。可是當(dāng)應(yīng)用隨著時間的推進淤堵,加入的功越來越多寝衫,最終會變得巨大,一個項目中很有可能數(shù)百萬行的代碼拐邪,互相之間繁瑣的jar包慰毅。
? ? 1、不再適用敏捷開發(fā)扎阶,過于復(fù)雜汹胃,任何開發(fā)者都不能夠完全理解,修復(fù)漏洞和實現(xiàn)新功能變得困難和耗時东臀。
? ? 2着饥、規(guī)模越大,啟動時間越長惰赋,自然會拖慢開發(fā)進度宰掉,一個小功能的修改部署起來變得困難,必須重新部署整個應(yīng)用。
? ? 3轨奄、系統(tǒng)的不同的模塊的需要不同的特定的虛擬機環(huán)境時孟害,由于是整體應(yīng)用,那么只能折中選擇挪拟。
? ? 4挨务、任意模塊的漏洞或者錯誤都會影響這個應(yīng)用,降低系統(tǒng)的可靠性
? ? 5玉组、還有一個如果想整體應(yīng)用采用新的技術(shù)耘子,新的框架或者語言,那是不可能的球切。
如果采用微服務(wù)架構(gòu)模式谷誓,則可以解決單一架構(gòu)模式帶來的系統(tǒng)復(fù)雜性。主要包括以下幾個好處:
? ? 1吨凑、由于每個服務(wù)都是獨立并且微小的捍歪,由單獨的團隊負責(zé),仍然可以采用敏捷開發(fā)模式鸵钝,自由的選擇合適的技術(shù)糙臼,甚至可以重寫老服務(wù),當(dāng)然都要遵守統(tǒng)一的API約定恩商。
? ? 2变逃、 每一個微服務(wù)都是獨立部署的,可以進行快速迭代部署怠堪,根據(jù)各自服務(wù)需求選擇合適的虛擬機和使用最匹配的服務(wù)資源要求的硬件揽乱。
? ? 3、整體應(yīng)用程序被分解成可管理的模塊和服務(wù)粟矿,單個的服務(wù)可以更快的開發(fā)凰棉、更簡單的理解和維護。
? ? 4陌粹、 一些需要進行負載均衡的服務(wù)可以部署在多個云虛擬機上撒犀,加入NGINX這樣的負載均衡器在多個實例之間分發(fā)請求,這樣不需要整個應(yīng)用進行負載均衡了掏秩。
每個后端服務(wù)暴露一套REST API或舞,大部分服務(wù)調(diào)用其他服務(wù)提供的API。每個服務(wù)都有自己的數(shù)據(jù)庫模式蒙幻,而不是共享單個數(shù)據(jù)庫模式映凳。盡管這會造成某些數(shù)據(jù)的冗余,但是對于微服務(wù)架構(gòu)這個獨立數(shù)據(jù)庫模式是必要的杆煞,確保了獨立服務(wù)之間的松散耦合魏宽。
以上介紹的微服務(wù)架構(gòu)模式表面上類似于SOA,兩種架構(gòu)都包含一組服務(wù)决乎《友可以認為微服務(wù)架構(gòu)是不包括Web服務(wù)規(guī)范(WS-)、企業(yè)服務(wù)總線(ESB)的SOA构诚“稣叮基于微服務(wù)的應(yīng)用傾向于使用更簡單輕量級的協(xié)議,比如 REST 而不是 WS-范嘱。微服務(wù)自己實現(xiàn)類似 ESB 的功能并且拒絕 SOA 的其他部分送膳,比如規(guī)范模式的概念。
###3.關(guān)于微服務(wù)的一些缺點
? ? 微服務(wù)缺點
? ? 1丑蛤、微服務(wù)應(yīng)用作為分布式系統(tǒng)帶來了復(fù)雜性叠聋。當(dāng)應(yīng)用是整體應(yīng)用程序時,模塊之間調(diào)用都在應(yīng)用之內(nèi)受裹,即使進行分布式部署碌补,依然在應(yīng)用內(nèi)調(diào)用∶奕模可是微服務(wù)是多個獨立的服務(wù)厦章,當(dāng)進行模塊調(diào)用的時候,分布式將會麻煩照藻。
? ? 2袜啃、多個獨立數(shù)據(jù)庫,事務(wù)的實現(xiàn)更具挑戰(zhàn)性幸缕。
? ? 3群发、測試微服務(wù)變得復(fù)雜,當(dāng)一個服務(wù)依賴另外一個服務(wù)時发乔,測試時候需要另外一個服務(wù)的支持也物。
? ? 4、部署基于微服務(wù)的應(yīng)用也很復(fù)雜列疗,整體應(yīng)用程序部署只需要部署在一組相同的服務(wù)器上滑蚯,在這些服務(wù)前面加入傳統(tǒng)的負載均衡器即可。獨立服務(wù)的不是講變得復(fù)雜抵栈,需要更高的自動化形式告材。
## cmpay quick start的學(xué)習(xí)
###1.學(xué)習(xí)Gradle
? 了解 Grade的配置文件
? ? cmpay-quick-starter的配置文件學(xué)習(xí).
? ? buildscript是用來聲明gradle腳本自身需要使用的資源,包括依賴項,第三方插件,maven倉庫地址等.
? ? buildscript {
? ? repositories {
? ? ? ? //添加我們的倉庫
? ? ? ? // 聲明倉庫的源」啪ⅲ可以使用jcenter()來聲明也可以.jcenter()中兼容了maven的中心倉庫
? ? ? ? maven { url "http://10.9.10.115:8081/repository/maven-public/" }
? ? }
? ? //配置全局變量
? ? ext {
? ? ? ? springBootVersion = '1.5.10.RELEASE'
? ? ? ? lemonVersion = '1.0.0-SNAPSHOT'
? ? ? ? cmpayVersion = '1.0.0-SNAPSHOT'
? ? ? ? sonarUrl="http://172.16.50.222:9000/"
? ? }
? ? //添加依賴
? ? dependencies {
? ? ? ? classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
? ? ? ? classpath("org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.5")
? ? ? ? classpath("com.cmpay:lemon-plugin:${lemonVersion}")
? ? }
? ? }
subprojects{}這個里面的東西聲明了子項目中要用到的資源.
//配置簽名
configure{}這個地方我暫時還不出來有什么作用.
###2.運行我們的consumer子項目和user子項目
? ? 在使用Gradle進行builder的時候會出現(xiàn)不可編譯字符的錯誤,然后就是在執(zhí)行ConsumerApplication的mian方法的時候會出現(xiàn)he server time zone value '?й???????' is unrecognized or represents more than one time zone.
You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.所述錯誤.
? ? 解決方法是:在我們的bootstrap-dev.yml配置文件下
? ? dataSources :
? ? primary :
? ? ? url : jdbc:mysql://localhost:3306/seatelpay?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=true
? ? 改成這個就能通過編譯,然后在執(zhí)行main方法的時候不會出現(xiàn)上述的sql異常.最后的useSSL指的是配置的mysql版本和自己本地的不一致時,要為true.
? ? 然后執(zhí)行main方法就可以成功了.
## 今日學(xué)習(xí)總結(jié)
? ? 通過今天的學(xué)習(xí),我了解到了Gradle的用法,然后是在對cmpay的一些基本的配置.在我們的開發(fā)環(huán)境中,我們需要引入spring_redis,rabbitmq , idgen ,cache ,redisson,eureka ,lemon_datasource,這些東西都有在我們的bootstrap中有體現(xiàn).但是我不清楚為什么要這么引入.然后引入的作用和我們的lemon的框架有什么聯(lián)系?這些還待自己好好了解.
## 明天目標(biāo)
? ? 了解springcloud 和lemon-quick-start