Golang 下的微服務 - 第 10 部分 - 總結

來源:互聯網
上載者:User
一路走來,多麼奇妙的一段旅程啊!完成這些文章花了好幾個月的時間。第一篇文章發佈於 2017 年底,現在 2018 年已經過去快一半了,我才剛剛在寫本系列最後一篇文章。寫這一系列文章花費了我不少時間和精力。對我來說這是一個令人生畏的任務,首先是因為我對各部分知識只是有個大概的瞭解,其實,寫這些文章的部分初衷也是想提高我對相關知識的理解,同時也想得到社區的反饋,沒有比得到社區的認可更棒的事情了。在寫作過程中,我學到了很多,和很多又酷又聰明的人進行了討論,他們給了我很大協助。其次,這一系列文章涉及的範圍很廣,涵蓋了實現微服務的各個階段以及如何部署,其中用到了許多不同的技術,比如資料庫、服用提供者、最佳實務等等,這是我所做的工作中最困難的一個。不過除了這些,我也學到了比想象中多得多的東西,我很高興許多人給我發郵件,這幾個月裡我一共收到了超過 50 封,有的是問我下一篇什麼時候發布的,有的是感謝我的,有的是鼓勵我的,這對我完成這一系列文章真的很有協助。所以我要感謝發郵件給我的人,同時我也很抱歉有些郵件我回複的不是太及時。我要感謝 Asim,他經常要花時間回答我的一些關於微服務的簡單問題,作為回報,我把這一系列文章提供給了微服務的官方組織,他們把這些文章放在了 examples/tutorials 目錄,希望能夠對新接觸微服務的人有一些協助。我要感謝 Ke Ding,他把這一系列文章翻譯成了中文,不管你知道還是不知道,在中國 Go 社區的規模是非常大的,而且還在增長,所以我非常感謝他做出的貢獻。如果你正在用非母語閱讀這篇文章,並且想翻譯成你的母語,就發郵件給我,我會把翻譯後的文章連結放到原文裡。我之前收到了一封郵件,說是想要把這些文章翻譯成俄文,但可惜的是我找不到那封郵件了,所以如果你正在閱讀這篇文章,請再給我發封郵件,翻譯成俄文是一件很酷的事情。## 我學到的東西和不足的地方我不僅學到了文章裡涉及到的許多技術知識,也學會了寫文章的一些技巧。我學到的最大的東西就是:保持簡單,不要在一篇文章裡涉及太多東西。這對讀者和作者都有許多好處。在寫這些文章期間,有好多次,我感覺自己同一時間在處理太多的事情。我建立了好幾個微服務,當我不小心在一個微服務中犯了一些錯誤時,我就不得不去更改其它幾個微服務的代碼。對我來說,這是一個非常繁瑣的事情,對讀者來說可能也是這樣。我遇到的最大的問題是沒能找到一個合適的方法把幾個微服務放到一個項目中。社區給了我一些好的建議,但是我覺得要實現這些想法得花費好多時間,所以在寫到一半時我不得不把項目拆分成了好幾個子項目,我覺得這個決定讓我失去了不少讀者,這是我在寫這一系列文章中覺得不太滿意的。這樣做很明顯是忽略了讀者的感受,從一些層面上,我想再一次說明:要是重寫的話我要麼把第一篇文章寫的微服務做為一個單獨的項目,要麼找到為一個合適的方法,把所有微服務放到一個項目中。我也弄丟了之前各個部分的代碼分支,也就是說目前不能檢出之前的代碼來查看代碼演化過程。我發現在使用 Go 的 Vendor 機制時,不知道 什麼時候就會產生很多分支,這讓維護起來非常困難。但丟失了這些寶貴的分支仍然讓我十分煩惱。另一個問題是:隨著我理解的加深,我不得不回過頭來,根據我新的理解,對先前的代碼進行修改,有時候改得就像完全是一篇新的文章一樣。幸運的是,社區的人通過郵件指出了文章中的一些問題,所以如果你發現了一些前後矛盾的地方,請讓我知道。最後一個問題是:我感覺一些文章寫得不太深入。篇幅比較短,只涵蓋了最基本的內容。這是因為涉及的技術太多,如果對每一個技術都寫的很細,我怕永遠也完不成這一系列文章了。但是如果你想知道任何技術的更加詳細的內容,請發郵件給我或者在 [Patreon](https://www.patreon.com/ewanvalentine) 上關注我,如果有這方面需求的人很多,我一定會寫文章做深入的解釋。## 他們是怎麼做的?通過Google的分析,這些文章有超過 50,000 閱讀量,我對這個資料感覺很高興。你可能注意到的在文章中有一些廣告,但是他們產生的收益其實不太多,還不夠支付我因為忘記關掉Google雲上啟動並執行叢集的費用。但這不是問題,我並不是為了錢而寫這些文章的,這些廣告收入只是些很好的獎勵。你可能還注意到了我在每篇文章開始和結束加的 Patreon,我最近得到了一個人的贊助,我非常感謝他。如果你覺得這些文章對你有價值,也希望你能提供一些贊助,這可以讓我花更多時間來寫這些文章。## 關於微服務最後的想法儘管我發現微服務有很多好處,我也對只是因為這是一個好注意就全盤拿來用的做法抱謹慎的態度。對於每件事情,都需要時間和空間。我們最終完成的這個應用,是從一個未經雕琢的原始應用,經過這一系列文章中描述的技術和模式的打磨下,最後變成了幾個有用的微服務。我寫這一系列文章的部分原因就是來分享我在把一個大的應用拆分成幾個微服務的過程中學到的東西,並且通過社區的反饋來更深入的理解微服務,同時也驗證我方法的正確性。我們把微服務最佳化的太多了嗎?非常有可能,我們原來的應用工作得很好,程式碼經過了許多修改完善,裡麵包含了許多從來也不會再用的代碼,或者是公司之前迭代的產物,由於相容性的問題保留了下來。我想說的是:現在這個程式很雜,比較難於維護。我們寫的微服務的例子只是一個實驗產品,我們正在考慮實現一些商業案例,但我們真的不確定是不是要擴充這個樣本產品。我感覺我在我們的應用上添加了越來越多的東西,但是只有少數得到了應用,使應用變得非常難以維護。也許採用微服務還不太成熟,但是我感覺微服務技術可以讓我們構建更好的原型,去測試一些功能,如果不合適,可以丟掉不用,這樣很靈活。所以儘管採用這種新的模式可能要花費很多的精力,但是這樣做可以帶給我們嘗試新想法的靈活性,寫出的代碼也更加清晰,更加易於維護。我甚至發現我們更加擅長寫測試了,比什麼東西都在一個項目裡會簡單一些。做為一個簡單的樣本程式採用微服務可能有點早,但是我很高興最後我們還是採用了這種方式。許多人會告訴你,如果你正要開始開發一個項目,應該盡量不要使用微服務,因為在微服務中添加功能會花費特別多的時間。但我認為這隻說對了一部分,最好是讓事情在開始的時候是正確的,這樣你就有了一個好的構建的基礎,而且我認為在微服務中添加功能也不是太難。更確切的說應該是從頭建立一個微服務會花許多時間的精力。如果爭論點在這的話,我百分百贊同這個觀點。但是我認為現在工具和概念正變得更簡單也更易理解,建立和維護微服務不會花特別多時間和精力。目前,大多數雲端服務供應商都整合了 Kubernetes ,資訊全在那裡,在應用本系列文章中的方法時不會遇到太多問題。 AWS 甚至提供了像 Pargate 這樣的工具協助我們處理大部分困難的工作。不要猶豫,如果你的程式中有多個特性,一定要考慮一下是否可以採用微服務。不要因為許多人說不可以就被嚇到,現在來說使用微服務沒有什麼難的。但話又說回來了,如果你對現有的程式還比較滿意,也不要對非要採用一種新的方法感覺有很大的壓力。基本原則是:如果還能用,就不要去修改它!## 接下來是什麼首先,我要整理還沒有處理的反饋資訊,改進之前的一些文章,我不會因為已經寫完了就忘這個事情,我會時常回頭來看看它們,如果我對哪一部分技術有了更加深入的理解,我就會更新相關的文章。完成了這些文章,我感覺非常好,所以我想乘著這股勁兒,馬上開始寫新的系列文章。我已經想了好幾個月應該寫什麼內容,最後決定還是寫 serverless 的相關內容。當然還是用 Golang。但這一次是在 AWS lambda 平台上,我也會集中精力來建立一個完整的產品,而不只是一些程式碼範例。我會用 AWS serverless 技術建立一個不是太實用,但是有很多功能的樣本程式除了這些,我也正在考慮把這些文章從我的個人部落格移到一些更加專業的 Go 學習網站上。不過實現起來可能有點困難,因為它可能需要自己的品牌和市場,但這隻是我在考慮的事情。總之,隨時歡迎大家對這些想法的反饋。再一次感謝大家對我的支援和反饋:)## 最終的文章列表- [Getting started, gRPC](https://ewanvalentine.io/microservices-in-golang-part-1) [《GCTT 中譯文》](https://studygolang.com/articles/12060)- [Docker and micro](https://ewanvalentine.io/microservices-in-golang-part-2) [《GCTT 中譯文》](https://studygolang.com/articles/12094)- [Docker compose and datastores](https://ewanvalentine.io/microservices-in-golang-part-3) [《GCTT 中譯文》](https://studygolang.com/articles/12452)- [Authentication and JWT](https://ewanvalentine.io/microservices-in-golang-part-4) [《GCTT 中譯文》](https://studygolang.com/articles/12485)- [Event brokering](https://ewanvalentine.io/microservices-in-golang-part-5) [《GCTT 中譯文》](https://studygolang.com/articles/12488)- [Web Clients](https://ewanvalentine.io/microservices-in-golang-part-6) [《GCTT 中譯文》](https://studygolang.com/articles/12798)- [Terraform](https://ewanvalentine.io/microservices-in-golang-part-7) [《GCTT 中譯文》](https://studygolang.com/articles/12799)- [Kubernetes](https://ewanvalentine.io/microservices-in-golang-part-8) [《GCTT 中譯文》](https://studygolang.com/articles/12836)- [CircleCI](https://ewanvalentine.io/microservices-in-golang-part-9) [《GCTT 中譯文》](https://studygolang.com/articles/13515)如果你發現這篇文章有價值,並且你也在用 ad-blocker(誰能責怪你呢)。請為了我花費的時間和精力提供一些贊助,非常感謝![https://monzo.me/ewanvalentine](https://monzo.me/ewanvalentine)或者,在 [Patreon](https://www.patreon.com/ewanvalentine) 贊助我,好讓我寫出更多的像這樣的文章

via: https://ewanvalentine.io/microservices-in-golang-part-10/

作者:Ewan Valentine 譯者:jettyhan 校對:polaris1119

本文由 GCTT 原創編譯,Go語言中文網 榮譽推出

本文由 GCTT 原創翻譯,Go語言中文網 首發。也想加入譯者行列,為開源做一些自己的貢獻嗎?歡迎加入 GCTT!
翻譯工作和譯文發表僅用於學習和交流目的,翻譯工作遵照 CC-BY-NC-SA 協議規定,如果我們的工作有侵犯到您的權益,請及時聯絡我們。
歡迎遵照 CC-BY-NC-SA 協議規定 轉載,敬請在本文中標註並保留原文/譯文連結和作者/譯者等資訊。
文章僅代表作者的知識和看法,如有不同觀點,請樓下排隊吐槽

315 次點擊  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.