
本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※網頁設計公司推薦不同的風格,搶佔消費者視覺第一線
※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整
※南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!
※教你寫出一流的銷售文案?
※超省錢租車方案
※聚甘新
![]() |
美國電動車商特斯拉(Tesla)於10月26日發表今年第三季財報,以淨營收2,190萬美元的成果翻紅,EPS相當於每股0.14美元。全球電動車市場蓬勃,且Model 3車款的訂單爆量,市況前景佳,也帶動了上游的供應鏈興盛。為特斯拉車用電池供應原料的日本住友金屬礦山(Sumitomo Metal Mining)也宣布將擴大產能。
特斯拉轉盈
特斯拉今年第三季的淨營收為2,190萬美元,EPS每股0.14美元,較去年每股虧損1.78美元有大幅成長。經會計調整後,第三季EPS為0.71美元,遠高於原先路透社調查預估的虧損0.54美元。會計調整後營收23億美元,也優於原先法人預期的19.8億美元。
特斯拉執行長Elon Musk在財報說明會上表示,今年下半年仍力求出貨5萬輛電動車的目標,並將致力於提升毛利率;在此基礎下,Musk看好第四季營收仍將持續獲利。
特斯拉亦指出,Model 3的交車時間表仍在軌道上,相當於駁斥Model 3將會面臨交車延遲的市場傳聞。特斯拉第三季財報的表現,也將影響股東於11月17日的股東會上針對是否併購SolarCity之投票案的意願。
特斯拉訂單多,上游樂
特斯拉的車用電池由Panasonic提供,而Panasonic的鋰離子電池其中一項原料──鎳酸鋰,則幾乎都由日本住友金屬礦山供應。因應特斯拉訂單強勁,以及全球電動車需求成長,住友金屬礦山宣布砸下180億日圓資金,擴大鎳酸鋰產能。
住友金屬礦山目前的鎳酸鋰每月產能約為1,850噸,預計在2018年1月擴產至3,550噸,以供應未來電動車用鋰電池所需。同時,住友金屬礦山也與Panasonic合作研發高性能鎳酸鋰的產能。
住友金屬礦山的擴產計畫,與特斯拉預計在2017年開始出貨Model 3有直接關聯。加上特斯拉預計2018年要出貨50萬輛Model 3,住友金屬礦山也因此將原先擴產到2,550噸的計畫提高到3,550噸。
其他鋰電池材料,如正負極、分隔膜、電解液等,日系、韓系廠商如住友化學、Toray、旭化成、昭和電工等的市占率相當高。這些廠商也都看好電動車市場的需求繼續成長,持續有擴產計畫,並與鋰電池大廠Panasonic、LG Chem等公司密切合作。
(照片來源: shared by CC 2.0)
本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※為什麼 USB CONNECTOR 是電子產業重要的元件?
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※台北網頁設計公司全省服務真心推薦
※想知道最厲害的網頁設計公司“嚨底家”!
※推薦評價好的iphone維修中心
※聚甘新
![]() |
台灣本地的電動車大廠凱勝綠能科技正式於嘉義縣馬稠後工業區破土興建新廠房。馬稠後廠房共分三廠,總投資額達新台幣60億元,首期一廠工程預計在2018年完工,將成為台灣規模最大的電動車生產基地,並將進一步投入綠能相關產業的研發製造。
凱勝綠能的招牌產品為電動巴士,是目前台灣最大的電動巴士生產商。為深耕台灣在地電動車產業,凱勝綠能看上馬稠後工業區的地理區位,規劃興建三個廠房。投資新台幣25億元的一廠工程於11月1日正式動土,預計在2018年完工,屆時電動巴士產能可提高到1,000餘輛,年產值新台幣300億元以上,並可創造當地就業和10億餘元的地方稅收。
凱勝綠能董事長陳怡仁表示,馬稠後工廠一廠除將進行電動車研發生產外,更將投入太陽能綠電與儲能系統的開發和應用,如提升電池儲能功能等。到了二、三廠陸續完工後,還將投入各式電動載具與相關產品的研發製造,屆時馬稠後工廠不僅會是全台規模最大的電動車建案,也將形成完整的電動車與綠能產業研發基地。
陳怡仁指出,電動車是「零排放、零汙染、零噪音」的「三零」產業,將有助守護台灣與地球環境。嘉義縣長張花冠亦蒞臨破土典禮,並親自試乘凱勝綠能的電動車。
(照片:嘉義縣長張花冠試乘電動車。來源:嘉義縣政府)
本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※網頁設計公司推薦不同的風格,搶佔消費者視覺第一線
※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整
※南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!
※教你寫出一流的銷售文案?
※超省錢租車方案
※聚甘新
日經新聞3日報導,日本汽車零組件商久野金屬工業(Kuno Kinzoku Industry)計畫將使用於電動車(EV)、插電式油電混合車(PHV)的馬達相關零件「馬達殼(motor housing、見附圖)」產能提高至現行的約50倍水準,主因全球各地對環保規範日益嚴苛,帶動EV/PHV今後料急速普及。馬達殼為圓筒狀的鐵製外殼,用於覆蓋住作為EV動力的大型馬達、並使其固定。
報導指出,久野位於日本常滑市的本社工廠內目前僅擁有一座生產馬達殼的設備、且最近已處於產能全開狀態,因此久野計畫投資約4億日圓、擴增設備,將月產能從現行的7,000-8,000個最高擴增至40萬個的規模。久野社長久野忠博表示,「來自顧客端的尋單持續增加」。
久野設立於1947年,於2010年左右開始供應大型馬達殼給汽車大廠使用,目前在馬達殼市場上握有高市佔率。
根據日本市調機構富士經濟(Fuji Keizai)公布的調查報告顯示,PHV、EV在2025年以後的需求增幅將加快,預估2030年左右時,油電混合車(HV)、PHV、EV將呈現幾乎相互抗衡的局面,2035年在北美、歐洲、中國需求加持下,PHV、EV市場將進一步擴大,超越HV。
富士經濟指出,全球EV市場當前將持續呈現緩和增長,不過預估自2020年左右起,EV需求將呈現急速擴大,預估2035年全球EV市場規模將達567萬台、將較2015年飆增近16倍(成長1,567%);另外,2035年全球PHV市場規模將達665萬台、將較2015年(21萬台)飆增近31倍(成長3,066%)。
(本文內容由 授權轉載)
本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※網頁設計公司推薦不同的風格,搶佔消費者視覺第一線
※Google地圖已可更新顯示潭子電動車充電站設置地點!!
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※別再煩惱如何寫文案,掌握八大原則!
※網頁設計最專業,超強功能平台可客製化
※聚甘新
![]() |
日系車商豐田(Toyota)看好純電動車(EV)的市場,正在計畫跨入此一領域,拓展油電混和車、燃料電池車(FCV)之外的新市場,並與BMW、Tesla等國際知名車廠一較高下,並挑戰日廠Leaf的龍頭地位。
《日經》中文網報導,Toyota預計最快在2017年新設EV的開發與設計部門,並整合集團資源,盡快投入量產。Toyota將整合油電混和車Prius和經典車款Corolla的平台技術,以推出一次充電續航力300公尺的純電動車為首要目標。此外,由於SUV車款頗受歡迎,Toyota也會考慮推出純電動車版的SUV車款。
同時,Toyota將加速今年1月成立的電池材料技術部門的研發進度,也會考慮向外採購核心零組件,以強化電動車用電池的性能。
市場競爭者多,日產Leaf仍占銷售龍頭
Toyota曾於2012~2014年間在美國與Tesla共同開發過SUV純電動車,但考量到電池的成本與性能限制等問題,並未積極發展純電動車事業。然而,隨著Tesla、BMW、Volkswagen、BYD等國際大廠加入戰局,電動車的各項零件性能與續航力都有顯著的提升,也使Toyota決定重新加入開發純電動車的行列。
MoneyDJ引述日媒Sankei Biz的報導表示,截至2016年8月為止,日產Leaf仍然是全球最暢銷的電動車,累計銷售量達23.4萬輛。不過,Leaf正與Tesla展開激烈的銷售戰。
報導指出,日本市調機構富士經濟預測,插電式油電混和車(PHEV)和純電動車的需求在2025年以後將會加速,2030年時將能與油電混和車廂庭抗禮;2035年時,PHEV和電動車的市場將超越油電混和車。屆時全球電動車的市場規模將達567萬輛,較2015年成長16倍之多。
(照片來源:)
本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※網頁設計公司推薦不同的風格,搶佔消費者視覺第一線
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面
※南投搬家公司費用需注意的眉眉角角,別等搬了再說!
※教你寫出一流的銷售文案?
※聚甘新

美聯社5日報導,通用汽車(General Motors)已開始在美國密西根州奧萊恩(Orion)鎮生產Chevrolet Bolt。這台續航力達238英里(383公里)的電動車建議零售價37,495美元起(註:最多可取得7,500美元的聯邦折抵稅額、扣除後入手價相當於29,995美元),今年底以前將於加州、奧勒岡州開賣,明年將擴及全美其他地區。根據凱利藍皮書(Kelley Blue Book)的統計,美國新車平均價格為34,000美元。特斯拉(Tesla Motors Inc.)200英里續航力、35,000美元(註:扣除聯邦折抵稅額前)Model 3電動車預計自2017年下半年開始交車。
IHS Markit汽車業分析師Stephanie Brinley指出,Bolt續航力遠高於美國平均來回通勤距離(40英里),但有時人們回家後可能忘了或沒有足夠時間進行充電,這是電動車主得多加費心的地方。美國目前使用中的電動車數量約23.5萬台,IHS預估Bolt開賣第一年銷售量逼近3萬台。美國去年電動車銷售量為10萬台,IHS預估年度銷售量將在2020年升至30萬台、2025年挑戰40萬台。
華爾街日報報導,通用汽車2015年10月宣布與LG電子結盟、後者將成為Chevrolet Bolt電動車的主要關鍵零件供應商。
英國金融時報8月報導,國際能源署(IEA)首席經濟學家Laszlo Varro指出,電動車目前對商品(原油)市場的影響力大約就像是10年前的太陽能一樣。他說,太陽能現在已是一個規模達數百億美元的市場、擁有龐大的影響力。Varro提到,電動車需達5千萬至1億台的規模、才能取代相當於100萬桶的石油日消費量。
IEA數據顯示,2009年全球40個國家合計僅有不到6千台的電動車、去年已升至120萬台。麥格理集團全球能源策略師Vikas Dwivedi指出,沙烏地阿拉伯對電動車的長期發展存有戒心,這可能就是它為何宣布將讓沙烏地阿拉伯國家石油公司(Saudi Aramco)初次公開發行(IPO)的原因之一。
CNNMoney去年底報導,石油輸出國組織(OPEC)發表的年度「世界石油展望(World Oil Outlook)」報告顯示,2040年高達94%的使用中車輛仍將是依靠石油燃料。OPEC報告顯示,除非出現重大技術性突破,否則在可預見的未來電動車將難以大幅取得市佔率。油國組織預估2040年僅有1%的車輛銷售量是來自純電動車款。
能源情報署(EIA)公布,截至2016年10月28日為止當週美國商用汽油庫存報2.238億桶、較去年同期高出3.9%。EIA公布的數據顯示,美國一般汽油每加侖零售均價10月31日報2.230美元,較一年前高出0.006美元。
(照片來源:。本文內容由 授權提供)
本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※想知道最厲害的網頁設計公司“嚨底家”!
※別再煩惱如何寫文案,掌握八大原則!
※產品缺大量曝光嗎?你需要的是一流包裝設計!
※聚甘新

美商特斯拉(Tesla)於今年9月正式進軍台灣,在台引發電動車熱。台北萬豪酒店宣布與Tesla合作設置充電站,同時推出限時活動,鼓勵民眾響應環保行動。
繼在台灣科技大學校區內設置充電站後,Tesla正式宣布與台北萬豪酒店合作,於飯店內設置6組充電站,成為全台首家提供Tesla電動車充電服務的飯店。車主只要於飯店內消費,就可免費享有充電服務。
台北萬豪酒店主管表示,萬豪國際的核心理念是「擁抱改變」,不但要跟著時代進步,還要勇於創新,與Tesla的形象相輔相成。藉由與Tesla合作設置電動車充電站,希望能提供客戶更便捷的服務,並推動現代科技。
萬豪酒店同時也推出相關活動,凡是11月30日前佩戴紅色配件到萬豪酒店消費的顧客,就可享有9折優惠。
Tesla主管表示,Tesla進入台灣市場後,將提供銷售、服務、充電等全方位服務,未來將繼續加速布建「目的地充電站」的腳步,以為台灣的Tesla車主提供更綿密的充電網絡。
除了萬豪酒店之外,台北晶華酒店也與BMW合作設置了i公共充電站,可供i3、i8等車款使用。
(照片來源:)
本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※別再煩惱如何寫文案,掌握八大原則!
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※超省錢租車方案
※教你寫出一流的銷售文案?
※網頁設計最專業,超強功能平台可客製化
※聚甘新
目錄
我們知道在JVM中為了加快編譯速度,引入了JIT即時編譯的功能。那麼JIT什麼時候開始編譯的,又是怎麼編譯的,作為一個高傲的程序員,有沒有辦法去探究JIT編譯的秘密呢?答案是有的,今天和小師妹一起帶大家來看一看這個編譯背後的秘密。
更多精彩內容且看:
小師妹:F師兄,JIT這麼神器,但是好像就是一個黑盒子,有沒有辦法可以探尋到其內部的本質呢?
追求真理和探索精神是我們作為程序員的最大優點,想想如果沒有玻爾關於原子結構的新理論,怎麼會有原子體系的突破,如果沒有海森堡的矩陣力學,怎麼會有量子力學的建立?
JIT的編譯日誌輸出很簡單,使用 -XX:+LogCompilation就夠了。
如果要把日誌重定向到一個日誌文件中,則可以使用-XX:LogFile= 。
但是要開啟這些分析的功能,又需要使用-XX:+UnlockDiagnosticVMOptions。 所以總結一下,我們需要這樣使用:
-XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation -XX:LogFile=www.flydean.com.log
根據上面的介紹,我們現場來生成一個JIT的編譯日誌,為了體現出專業性,這裏我們需要使用到JMH來做性能測試。
JMH的全稱是Java Microbenchmark Harness,是一個open JDK中用來做性能測試的套件。該套件已經被包含在了JDK 12中。
如果你使用的不是JDK 12,那麼需要添加如下依賴:
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>1.19</version>
</dependency>
更多詳情可以參考我之前寫的: 在java中使用JMH(Java Microbenchmark Harness)做性能測試一文。
之前有的朋友說,代碼也用圖片,看起來好看,從本文之後,我們會盡量把代碼也轉成圖片來展示:
看完我的JMH的介紹,上面的例子應該很清楚了,主要就是做一個累加操作,然後warmup 5輪,測試5輪。
在@Fork註解裏面,我們可以配置jvm的參數,為什麼我註釋掉了呢?因為我發現在jvmArgsPrepend中的-XX:LogFile是不生效的。
沒辦法,我只好在運行配置中添加:
運行之後,你就可以得到輸出的編譯日誌文件。
小師妹:F師兄,我看了一下生成的文件好複雜啊,用肉眼能看得明白嗎?
別怕,只是內容的多一點,如果我們細細再細細的分析一下,你會發現其實它真的非常非常……複雜!
其實寫點簡單的小白文不好嗎?為什麼要來分析這麼複雜,又沒人看,看了也沒人懂的JVM底層…..
大概,這就是專業吧!
LogCompilation文件其實是xml格式的,我們現在來大概分析一下,它的結構,讓大家下次看到這個文件也能夠大概了解它的重點。
首先最基本的信息就是JVM的信息,包括JVM的版本,JVM運行的參數,還有一些properties屬性。
我們收集到的日誌其實是分兩類的,第一類是應用程序本身的的編譯日誌,第二類就是編譯線程自己內部產生的日誌。
第二類的日誌會以hs_c*.log的格式存儲,然後在JVM退出的時候,再將這些文件跟最終的日誌輸出文件合併,生成一個整體的日誌文件。
比如下面的兩個就是編譯線程內部的日誌:
<thread_logfile thread='22275' filename='/var/folders/n5/217y_bgn49z18zvjch907xb00000gp/T//hs_c22275_pid83940.log'/>
<thread_logfile thread='41731' filename='/var/folders/n5/217y_bgn49z18zvjch907xb00000gp/T//hs_c41731_pid83940.log'/>
上面列出了編譯線程的id=22275,如果我們順着22275找下去,則可以找到具體編譯線程的日誌:
<compilation_log thread='22275'>
...
</compilation_log>
上面由compilation_log圍起來的部分就是編譯日誌了。
接下來的部分表示,編譯線程開始執行了,其中stamp表示的是啟動時間,下圖列出了一個完整的編譯線程的日誌:
<start_compile_thread name='C2 CompilerThread0' thread='22275' process='83940' stamp='0.058'/>
接下來描述的是要編譯的方法信息:
<task compile_id='10' method='java.lang.Object <init> ()V' bytes='1' count='1409' iicount='1409' stamp='0.153'>
上面列出了要編譯的方法名,compile_id表示的是系統內部分配的編譯id,bytes是方法中的字節數,count表示的是該方法的調用次數,注意,這裏的次數並不是方法的真實調用次數,只能做一個估計。
iicount是解釋器被調用的次數。
task執行了,自然就會執行完成,執行完成的內容是以task_done標籤來表示的:
<task_done success='1' nmsize='120' count='1468' stamp='0.155'/>
其中success表示是否成功執行,nmsize表示編譯器編譯出來的指令大小,以byte為單位。如果有內聯的話,還有個inlined_bytes屬性,表示inlined的字節個數。
<type id='1025' name='void'/>
type表示的是方法的返回類型。
<klass id='1030' name='java.lang.Object' flags='1'/>
klass表示的是實例和數組類型。
<method id='1148' holder='1030' name='<init>' return='1025' flags='1' bytes='1' compile_id='1' compiler='c1' level='3' iicount='1419'/>
method表示執行的方法,holder是前面的klass的id,表示的是定義該方法的實例或者數組對象。method有名字,有
return,return對應的是上面的type。
flags表示的是方法的訪問權限。
接下來是parse,是分析階段的日誌:
<parse method='1148' uses='1419.000000' stamp='0.153'>
上面有parse的方法id。uses是使用次數。
<bc code='177' bci='0'/>
bc是byte Count的縮寫,code是byte的個數,bci是byte code的索引。
<dependency type='no_finalizable_subclasses' ctxk='1030'/>
dependency分析的是類的依賴關係,type表示的是什麼類型的依賴,ctkx是依賴的context class。
我們注意有的parse中,可能會有uncommon_trap:
<uncommon_trap bci='10' reason='unstable_if' action='reinterpret' debug_id='0' comment='taken never'/>
怎麼理解uncommon_trap呢?字面上意思就是捕獲非常用的代碼,就是說在解析代碼的過程中發現發現這些代碼是uncommon的,然後解析產生一個uncommon_trap,不再繼續進行了。
它裏面有兩個比較重要的字段,reason表示的是被標記為uncommon_trap的原因。action表示的出發uncommon_trap的事件。
有些地方還會有call:
<call method='1150' count='5154' prof_factor='1.000000' inline='1'/>
call的意思是,在該代碼中將會調用其他的方法。count是執行次數。
複雜的編譯日誌終於講完了,可能講的並不是很全,還有一些其他情況這裏並沒有列出來,後面如果遇到了,我再添加進去。
本文的例子https://github.com/ddean2009/learn-java-base-9-to-20
本文作者:flydean程序那些事
本文鏈接:http://www.flydean.com/jvm-jit-logcompilation/
本文來源:flydean的博客
歡迎關注我的公眾號:程序那些事,更多精彩等着您!
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※為什麼 USB CONNECTOR 是電子產業重要的元件?
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※台北網頁設計公司全省服務真心推薦
※想知道最厲害的網頁設計公司“嚨底家”!
※推薦評價好的iphone維修中心
※聚甘新
上一篇【.Net Core微服務入門全紀錄(四)——Ocelot-API網關(上)】已經完成了Ocelot網關的基本搭建,實現了服務入口的統一。當然,這隻是API網關的一個最基本功能,它的進階功能還有很多很多。
首先需要解決的就是服務發現的問題,服務發現的優點之前講過,就不說了。
上一篇中我們的服務地址都是寫在ocelot.json配置文件里,現在我們需要結合之前的Consul來實現服務發現。
首先NuGet安裝Ocelot.Provider.Consul:
修改Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
//添加ocelot服務
services.AddOcelot()
.AddConsul();//添加consul支持
}
修改ocelot.json配置:
{
"Routes": [
{
"DownstreamPathTemplate": "/products",
"DownstreamScheme": "http",
"UpstreamPathTemplate": "/products",
"UpstreamHttpMethod": [ "Get" ],
"ServiceName": "ProductService",
"LoadBalancerOptions": {
"Type": "RoundRobin"
}
},
{
"DownstreamPathTemplate": "/orders",
"DownstreamScheme": "http",
"UpstreamPathTemplate": "/orders",
"UpstreamHttpMethod": [ "Get" ],
"ServiceName": "OrderService",
"LoadBalancerOptions": {
"Type": "RoundRobin"
}
}
],
"GlobalConfiguration": {
"BaseUrl": "http://localhost:9070",
"ServiceDiscoveryProvider": {
"Scheme": "http",
"Host": "localhost",
"Port": 8500,
"Type": "Consul"
}
}
}
這個配置應該很好理解,就是把我們上次的DownstreamHostAndPorts節點去掉了,然後增加了ServiceDiscoveryProvider服務發現相關配置。
注意,Ocelot除了支持Consul服務發現以外,還有Eureka也可以,Eureka也是一個類似的註冊中心。
好了,代碼修改就差不多了,下面運行程序測試一下:
客戶端正常運行。
至此我們就實現了服務註冊與發現和api網關的基本功能。接下來就要提到:服務治理
其實服務治理也沒有一個非常明確的定義。它的作用簡單來說,就是幫助我們更好的管理服務,提升服務的可用性。——緩存,限流,熔斷,鏈路追蹤 等等。。。都屬於常用的服務治理手段。
之前講的負載均衡,服務發現也可以算是服務治理。
在Ocelot中啟用緩存,需要NuGet安裝一下Ocelot.Cache.CacheManager:
修改Startup.cs中的ConfigureServices()方法:
//添加ocelot服務
services.AddOcelot()
//添加consul支持
.AddConsul()
//添加緩存
.AddCacheManager(x =>
{
x.WithDictionaryHandle();
});
修改ocelot.json配置文件:
{
"Routes": [
{
"DownstreamPathTemplate": "/products",
"DownstreamScheme": "http",
"UpstreamPathTemplate": "/products",
"UpstreamHttpMethod": [ "Get" ],
"ServiceName": "ProductService",
"LoadBalancerOptions": {
"Type": "RoundRobin"
},
"FileCacheOptions": {
"TtlSeconds": 5,
"Region": "regionname"
}
},
{
"DownstreamPathTemplate": "/orders",
"DownstreamScheme": "http",
"UpstreamPathTemplate": "/orders",
"UpstreamHttpMethod": [ "Get" ],
"ServiceName": "OrderService",
"LoadBalancerOptions": {
"Type": "RoundRobin"
},
"FileCacheOptions": {
"TtlSeconds": 5,
"Region": "regionname"
}
}
],
"GlobalConfiguration": {
"BaseUrl": "http://localhost:9070",
"ServiceDiscoveryProvider": {
"Scheme": "http",
"Host": "localhost",
"Port": 8500,
"Type": "Consul"
}
}
}
在Routes路由配置中增加了FileCacheOptions。TtlSeconds代表緩存的過期時間,Region代表緩衝區名稱,這個我們目前用不到。
好了,代碼修改完需要編譯重啟一下網關項目,然後打開客戶端網站測試一下:
可以看到,5秒之內的請求都是同樣的緩存數據。Ocelot也支持自定義緩存。
限流就是限制客戶端一定時間內的請求次數。
繼續修改配置:
{
"Routes": [
{
"DownstreamPathTemplate": "/products",
"DownstreamScheme": "http",
"UpstreamPathTemplate": "/products",
"UpstreamHttpMethod": [ "Get" ],
"ServiceName": "ProductService",
"LoadBalancerOptions": {
"Type": "RoundRobin"
},
"FileCacheOptions": {
"TtlSeconds": 5,
"Region": "regionname"
},
"RateLimitOptions": {
"ClientWhitelist": [ "SuperClient" ],
"EnableRateLimiting": true,
"Period": "5s",
"PeriodTimespan": 2,
"Limit": 1
}
},
{
"DownstreamPathTemplate": "/orders",
"DownstreamScheme": "http",
"UpstreamPathTemplate": "/orders",
"UpstreamHttpMethod": [ "Get" ],
"ServiceName": "OrderService",
"LoadBalancerOptions": {
"Type": "RoundRobin"
},
"FileCacheOptions": {
"TtlSeconds": 5,
"Region": "regionname"
},
"RateLimitOptions": {
"ClientWhitelist": [ "SuperClient" ],
"EnableRateLimiting": true,
"Period": "5s",
"PeriodTimespan": 2,
"Limit": 2
}
}
],
"GlobalConfiguration": {
"BaseUrl": "http://localhost:9070",
"ServiceDiscoveryProvider": {
"Scheme": "http",
"Host": "localhost",
"Port": 8500,
"Type": "Consul"
},
"RateLimitOptions": {
"DisableRateLimitHeaders": false,
"QuotaExceededMessage": "too many requests...",
"HttpStatusCode": 999,
"ClientIdHeader": "Test"
}
}
}
在Routes路由配置中增加了RateLimitOptions。ClientWhitelist代表客戶端白名單,在白名單中的客戶端可以不受限流的影響;EnableRateLimiting代表是否限流;Period代表限流的單位時間,例如1s,5m,1h,1d等;PeriodTimespan代表客戶端達到請求上限多少秒后可以重試;Limit代表客戶端在定義的時間內可以發出的最大請求數。
在GlobalConfiguration配置中也增加了RateLimitOptions。DisableRateLimitHeaders代表是否禁用X-Rate-Limit和Retry-After標頭(請求達到上限時response header中的限制數和多少秒后能重試);QuotaExceededMessage:代表請求達到上限時返回給客戶端的消息;HttpStatusCode:代表請求達到上限時返回給客戶端的HTTP狀態代碼。ClientIdHeader可以允許自定義用於標識客戶端的標頭。默認情況下為“ ClientId”。
最重要的就是Period,PeriodTimespan,Limit這幾個配置。
重新編譯啟動看一下效果:
超時很好理解,就是網關請求服務時可容忍的最長響應時間。熔斷的意思就是當請求某個服務的異常次數達到一定量時,那麼網關在一定時間內就不再對這個服務發起請求了,直接熔斷。
Ocelot中啟用 超時/熔斷 需要NuGet安裝一下Ocelot.Provider.Polly:
修改Startup.cs中的ConfigureServices()方法:
//添加ocelot服務
services.AddOcelot()
//添加consul支持
.AddConsul()
//添加緩存
.AddCacheManager(x =>
{
x.WithDictionaryHandle();
})
//添加Polly
.AddPolly();
同樣的在ocelot.json路由配置中增加QoSOptions:
"QoSOptions": {
"ExceptionsAllowedBeforeBreaking": 3,
"DurationOfBreak": 10000,
"TimeoutValue": 5000
}
ExceptionsAllowedBeforeBreaking代表發生錯誤的次數,DurationOfBreak代表熔斷時間,TimeoutValue代表超時時間。
以上的配置意思就是當服務發生3次錯誤時,那麼就熔斷10秒,期間客戶端的請求直接返回錯誤,10秒之後恢復。
這個不太好模擬,就不演示了,應該也挺好理解的。
。。。。。。
關於服務治理的學問還有很多,不繼續了。。。就到此為止吧。
想要更深入了解Ocelot的,請看官網:https://ocelot.readthedocs.io/en/latest/
或者看源碼:https://github.com/ThreeMammals/Ocelot
下一篇準備說一下:事件總線。
代碼放在:https://github.com/xiajingren/NetCoreMicroserviceDemo
未完待續…
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※網頁設計公司推薦不同的風格,搶佔消費者視覺第一線
※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整
※南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!
※教你寫出一流的銷售文案?
※超省錢租車方案
※聚甘新