CSDN架構領域編輯采訪了一些與會講師,談談他們將在會上分享的內容、相關技術和程序人生,帶你領略講師風采。
本期我們采訪的講師是來自閱文集團首席架構師徐海峰,主要負責內容中心的網站架構和分布式存儲、分布式計算工作。10年互聯網開發經驗,為開源分布式文件系統fastdfs提交過代碼。曾歷任Ctrip國際機票引擎架構師、5173分布式存儲和分布式計算架構師。多年來一直致力于網站架構和分布式計算的研究與實現,對大型網站架構和分布式計算有豐富的經驗。
徐海峰將在SDCC 2016深圳站之架構技術峰會上帶來題為《分布式系統的基石—ID生成器中的學問》的主題分享,全部架構技術峰會講師情況和議題等參見:SDCC 2016深圳站之架構技術峰會講師團亮相和議題大公開。
CSDN:請簡單介紹下您和目前的工作,以及關注的領域。
徐海峰:大家好,我是閱文集團(由盛大文學和騰訊文學整合而成的集團)的首席架構師徐海峰,大家可以叫我大嘴。我目前的工作主要在分布式存儲、分布式計算、公司內部框架的架構等工作。今年我還給自己加了一個工作項:推動我們的一些項目在GitHub上開源。
對于我自己來說,我一般比較關注分布式存儲和分布式計算、高性能運算等。其實業務系統的框架架構等工作很久之前就做過了,只是后來更關注分布式計算,所以現在我把它當成了副業,我的主業主要還是高性能運算。
CSDN:您有著10年的互聯網開發經驗,您是如何走上技術這條路的?
徐海峰:為什么看見這個問題,我第一個想到的字就是“熬”?其實確實也只能說是熬吧。開始的時候是技術不太過關,我就開始熬技術方面的。當時也傻乎乎的,辦法也不多,就想到買幾本書看看。然后沒想到看書竟然后來發展成了我的一個習慣。這10年來,我一直看書,我霸占了我家的一個半書架,里面都是我的書。
這還不算上被我淘汰掉的很多書。在技術行業就是這樣,等你技術ok了,你的機會就來了。還是那句話,熬著,磨練自己,機會只留給有準備的人
。
CSDN:您現任職于由盛大文學和騰訊文學整合而成的閱文集團,也曾在攜程、5173工作過,可否簡要回顧下自己的工作歷程,有什么心得和體會可分享?
徐海峰:先說一下這3家公司的區別吧!現在的公司閱文集團,因為我的自主性大一些,所以可以干預很多地方,雖然現在屬于剛剛開始,但底子算是比較好的;Ctrip,我當時去的時候就是磨練心智的,Ctrip在當時比較古板,技術也是相對挺low的(所以待了11個月實在受不了了,必須要走了);5173的話比較自由,很多事情都可以很簡單的完成,而且同事之間關系很不錯,我們到現在都一直在一起玩,我也在里面待的最久。
這么多年,我認為公司對人的關系挺大的,判斷一家公司的好壞,不能單一的看付多少報酬
,雖然這是第一選擇,但是還要看給你做多少的事情,你想做什么,到你能做什么,再到你能實現什么是有一個很大的跨度的。如果這家公司能給你想法上的自由,行動上的支持那就應該待的久一些。
CSDN:您目前是閱文集團的首席架構師,此前也是攜程和5173的架構師,在每一個階段中您對架構是怎樣的理解?以及您對于架構師是如何定義的?
徐海峰:我個人覺得架構挺簡單的。我一直和我下面的人說,做架構要比用架構簡單,因為你是游戲規則設定者。你既是運動員還是裁判,你再干不過人家那就沒法原諒了。另外,架構好比畫圓,不管你怎么畫,最后總歸要圓回來。當然一個架構的好壞還得看業務模式、人員素質、使用便捷性等因數。
一個好的架構一般不是靠短期內做出來的,都是一步一步改出來,或者是總結前面發生的事情再寫出來的。
我現在說得好像挺簡單,不過也有迷茫的時候,記得當時我做一個單點登錄都要想很久。在5173時,我認為技術就是無敵的,那時候剛剛接觸分布式計算等技術,一切都是嶄新的,充滿著誘惑,幾乎每天都干到很晚。后來到了Ctrip發現原來技術差一些也行?其實在Ctrip我算是閉關,在那里看了很多的書,有技術也有人文類的。一年時間也想通了很多的問題。
架構不僅和技術有關,還和人有關
。一個架構除了完成既定系統任務還要兼顧開發者等
。現在我的同事經常說我喜歡在技術上“強奸”別人。其實完全不是這樣,只是我想過幾乎所有的方式/方法,而且我選擇了我認為最好的那種。既能做到架構的簡潔,又能做到對于開發者快速的接受。像架構這種東西,不是越靈活越好,我恰恰相反的認為,架構這種東西,特別是需要靠別人編程配合完成的東西,越限制死越好
。
架構師的定義,我還是覺得他既是裁判又是運動員吧。當架構師不難,難的是怎么讓運動人忘記你裁判的身份。我一直在公司說的一句話:
我真正的成功在于你們都應該不知道有我這個人存在。特別是在系統上線后,如果在沒有我的情況下,系統能正常運行,那我才算是牛。
我也一直朝著這個目標努力。目前來看,在Ctrip、5173這兩個地方都實現了這個目標,我希望在閱文集團也能實現。
CSDN:您認為具備哪些素質才能成為是出色的架構師?
徐海峰:首先是要忍
。一個公司的架構或者是技術線并不是一朝一夕來決定的,它有很多的歷史原因,也有很多的無奈之舉。所謂的存在即合理,千萬不要上來就去大刀闊斧的砍下去,對于一些覺得不順眼、不那么完美的事情要學會去接受,等待時機再干掉它;
其次是要自我進化
。作為架構師,一般都是在公司內部技術比較牛的人。現在這個世界是日新月異的變化著,作為一個公司的技術領航人員,在技術上必須要保持一定的先進性。時刻需要進化自己,不斷的補充新的知識;
再次代碼能力不能丟
。我一些朋友也是做架構師的,他們對我現在還在寫代碼覺得很吃驚,而我對他們現在不寫代碼但是確是架構師也很吃驚。一個架構師連代碼都不寫了,難道就做做Slides?畫畫圖?然后開幾個演講?這就太頹廢了一些。不僅對公司不好,對自己也不負責任啊。
最后要學會忍受寂寞
。牛的人都是寂寞的。往往一個挺好的事情,當你滿懷信心的和同事們說的時候,他們一臉的迷茫。幾乎是沒有人點頭的,更不要說受到支持。這時候就要學會忍受這種“寂寞”,并學會去處理這種“寂寞”。
總的來說,我還是認為架構師和管理者還是不太一樣。架構師必須要首先做事情,然后再做人,當然做事情的時候也要追求合理的方式方法。
CSDN:目前,閱文集團的架構是怎樣的?可否簡單介紹下閱文集團整體架構的一些架構特點?以及作為架構師,您的工作重點有哪些?
徐海峰:說實話,閱文的架構還是比較亂的。畢竟是3家公司合并成的。目前我們的架構硬性上來說簡直可以開展覽館了。數據庫有:MySQL、SQL Server、Oracle等;應用層有:Java、PHP、C#、Python等,而業務系統還分屬在不同的機房。這是沒辦法的事情,畢竟以前是分屬3家公司,現在合并了,這種歷史預留問題是我們要面對的也是必須要解決的。
現在我們決定把數據庫從Oracle和SQL Server上遷移到MySQL上。應用層基本上以后就只有Java和PHP了,Java做Service,PHP做頁面,各取所長吧。目前我們已經在推進這個事情了,去年先把內容統一了,今年開始統一應用層和應用層的數據庫等。畢竟飯要一口一口吃,羅馬也不是一天建成的。這種“亂”的現象正在一步一步的被改進,我相信用不了多久就能統一吧。
我在閱文的時間其實剛剛2年,我是2014年4月15日入職的,那時候還叫騰訊文學。這兩年來,我一直在負責分布式存儲和分布式計算的工作。第一年我一個人寫了一個分布式文件系統(DFS),后撰寫的文章也發表在《程序員》2016年4月期上。然后抽空算是幫忙吧,貢獻了一個編程框架,叫Albianj。Albianj主要做分布式業務系統用,自帶了分布式事務、OEM、數據路由等功能,它可以讓你用單機開發部署到線上,更改幾個配置文件立刻就變成分布式系統來運行,目前也在我們公司大規模的使用。上文中說到的業務系統的遷移就是使用Albianj來完成的。后來配合內容中心的統一,我還寫了一個id生成器,這就是我要在SDCC 2016深圳站之架構技術峰會上講的,中間因為調度的需要,還開發了一個調度系統,比當當開源的那個功能要多一些(當當的海峰會不會殺了閱文的海峰?)。從去年7月份開始,我也開始接管團隊,我們團隊在做幾個東西:一個RPC的通訊協議、Nameserver、LogDB等工作。
我今年的工作重點應該不會放在具體的實現上了,我更多的會去做一些系統整體性的架構設計等工作。還有就是開源的工作,我也一直在不停的推進這件事情。目前來看,上面提到的幾個東西都會開源。到時候歡迎大家去GitHub,一起討論這些方案和實現。
CSDN:您如今是如何安排自己的新技術學習、研發團隊管理、編程、生活等時間的?
徐海峰:對于學習,我恰恰和別人相反。我不太去關注新的技術,我倒是挺喜歡那種老掉牙的技術的。開始我是寫C#的,后來我盡然去寫了C。其實就像我喜歡用VIM或者是Emacs而用不慣Sublime Text一樣,我對于新的東西到不是那么的感冒。我一直覺得現在技術不管怎么變化,都是從那些老掉牙的技術演化而來的
,金礦還是在老掉牙的技術中。比如現在分布式文件系統的存儲技術,幾乎和操作系統原理中的磁盤管理一模一樣,只是加了很多平衡性、一致性之類的算法,所以我現在在看匯編。對于匯編,我開始非常抗拒,但前幾天的一個系統Down掉讓我重新重視了起來。很多時候,在Online環境中,你根本就是無法Debug,就算用GDB也僅僅是把Dump文件拿下來,但那次我把源文件給弄丟了,不看匯編不行,所以我還是下定決定好好的看看匯編。匯編也沒有想象中的難,除了繁瑣一些,別的都還好。也不知道是不是我學的不精,還是還沒深入下去,沒到難的地方。
管理團隊這個事情其實我已近很久沒干了。去年開始又需要扮演這個角色了,我才撿了起來。要說工作嘛,肯定是一個人的時候舒服,人多了黑管理者帶來了比較多的亂七八糟事情。我一般管理分為2部分:
- 首先在生活上,我會給與一定的照顧。對于一些可以變通的地方我也不是那么的強求。互聯網公司嘛,本來就是比較自由的,而且我們的工作還不太算是簡單的業務實現,而是需要一定的創造性的,所以在這個上面我一直比較松。
- 另一方面,在技術上,我被我同事稱為“魔鬼”。我同事說我發起火來六親不認(PS:我已經很少發火了)。我規定對于屢教不改的我要懲罰。這算是我這里的“私刑”。第一次屢教不改的錯誤,解決方案抄100遍,第二次200,依次類推。我覺得犯錯誤不要緊,誰能無過?關鍵是你是不是真的用心去記住這個錯誤。我對待錯誤的態度是,第一次叫做不知道,第二次叫做不小心,千萬不要有第三次,第三次在我這里就是故意。既然你故意,那我就用故意的辦法治你。我是公司內第一個讓下屬抄“100遍”的上司。100遍這種懲罰雖然惡心、下流、卑鄙,但效果卻是出奇的好。凡是抄過100遍的人,至今還沒有人抄200遍。
編程和生活我還是放在一起說吧。因為我愛人和我說,在我的生活中,沒有生活。我是把愛好玩著玩著最后玩成工作的人。高中的時候就對編程很感興趣,后來找工作的時候發現除了編程我啥都不會,所以最后愛好變成了工作
。也不知道這到底算不算是我的優勢,我可以花更多的時間在編程上。我覺得時間是一定的,所以你的時間花在了這里,那么那里就會少一塊。我經常性把編程和生活搞亂在一起的。我會在洗澡的時候想問題,我會在出去玩的時候帶著電腦,甚至去年7月份前同事結婚,我們一起去馬爾代夫,早晨起來我還坐在陽臺上寫代碼。完了被朋友笑稱:在扔美金寫代碼。也因為這樣,我覺得我無形中比別人多擠出來了一些時間吧!開始時沒有什么效果,但是久而久之,效果很明顯。現在確實感覺知道的比一般的人多一些,貴在堅持啊!
好好準備,安安心心堅持,機會還是留給有準備的人。
CSDN:在本次SDCC 2016(深圳站)架構峰會上,您想分享的話題是?
徐海峰:這次我分享一個主題:id生成器。說到id生成器,沒聽過的會很詫異,這也好意思拿出來說?知道一點的,會和你說Snowflake算法。Twitter的Snowflake算法確實不錯,但是我認為它還能做得更好。我們的id生成器是在統一內容時發現要用。以前我們也是用數據庫的解決方案,但統一內容中心的時候,數據庫方案已經不能用了。當然我們也參考了Snowflake,但是都被否決了。最后我決定自己來開發一個。開始沒覺得有多難,其實本身確實也不是很難,但是需要考慮的相關問題卻要很多。一個小小的id,僅僅自是一個uint64的值,里面卻包含了很多的信息和對于取舍的考量。此次分享具體的包括:我們前期怎樣使用數據庫生成id、我們為什么放棄Snowflake算法、再到后來我們自己的算法,以及此后我們特有的排序id算法,來聽一下你就知道。
CSDN:您最期待在SDCC 2016(深圳站)架構峰會上看到哪些內容?
徐海峰:我還是想看到更多的自創的東西,而不是使用的心得什么的。這不是說使用的心得什么的不重要,也很重要,可以讓很多人少走很多的彎路。但是技術的發展畢竟是靠創新的。使用僅僅只是站在了巨人的肩膀上,我更喜歡看到更多的巨人自己站出來。
對于技術的縱向選擇,我這個人并不挑食,只要是好的都可以接受。不管你是運維、DB、架構,這些都可以相互借鑒。