首席架構師徐海峰眼中的架構和出色的架構師

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、架構,這些都可以相互借鑒。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539661.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539661.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539661.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java socket建立長連接_Java Web項目中使用Socket通信多線程、長連接的方法

很多時候在javaweb項目中我們需要用到Socket通信來實現功能,在web中使用Socket我們需要建立一個監聽程序,在程序啟動時,啟動socket監聽。我們的應用場景是在java項目中,需要外接如一個硬件設備,通過tcp通信&#xff0c…

hadoop-eclipse-plugin使用

下載hadoop安裝包:http://www.carfab.com/apachesoftware/hadoop/common/hadoop-1.0.2/ 但是沒有plugin,我到這個地方下載的:http://ishare.iask.sina.com.cn/f/23642243.html?fromlikecopy到你的eclipse_home的plugins下面。配置map/reduce…

hadoop eclipse plugin windows下載集合

收集了hadoop穩定版本的eclipse plugin for windows。資源分一律為0分 hadoop-eclipse-plugin-1.2.1.jar http://download.csdn.net/detail/zengmingen/9488180 hadoop-eclipse-plugin-2.2.0.jar http://download.csdn.net/detail/zengmingen/9488182 hadoop-eclipse-pl…

java 記事本界面_JAVA/GUI程序之記事本

自上半年JAVA課程結束后,再也沒有看過JAVA了,最近不是很忙,又簡單的看了看,本博客純屬記錄學習過程,請大神們別笑,其中錯誤是難免的,畢竟是新手寫的博客。下面就進入我們的正題吧,復…

104. Maximum Depth of Binary Tree

104. Maximum Depth of Binary Tree 題目 Given a binary tree, find its maximum depth.The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. 解析 // Maximum Depth of Binary Tree class Solution { publ…

mapper-reducer word count 實例

統計一個文件里各單詞的個數,假設這個文件很大。 原理如下圖: 編寫代碼: WCMapper.java package zengmg.hadoop.mr.wordcount;import java.io.IOException;import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; …

java 遠程調用url_使用Java的URL/HttpURLConnection進行遠程調用(POST請求)

利用Java的HttpURLConnection進行遠程url請求(調用遠程接口)測試類:請求類型為json,以post方式請求,利用OutputStream寫入數據實體類:public class User implementsSerializable {privateString name;privateString password;publicString ge…

LindDotNetCore~職責鏈模式的應用

回到目錄 職責鏈模式 它是一種設計模塊,主要將操作流程與具體操作解耦,讓每個操作都可以設置自己的操作流程,這對于工作流應用是一個不錯的選擇! 下面是官方標準的定義:責任鏈模式是一種設計模式。在責任鏈模式里&…

MR程序的幾種提交運行模式

MR程序的幾種提交運行模式 本地模型運行 1/在windows的eclipse里面直接運行main方法,就會將job提交給本地執行器localjobrunner執行 ----配置path:D:\hadoop-2.7.2\bin ----配置hadoop_home:D:\hadoop-2.7.2 ----復制 hadoop.dll和winutil…

構件之法讀書筆記04

我們前兩周我們團隊一起制作了一個大學生記賬軟件,但是我們沒有對我們的軟件進行測試,只要是這個功能能夠順利進行,我們就覺得OK。 其實,我認為我們的軟件是有問題的,對于一些極限的操作能否完成,在各種環境…

零點起飛學java視頻_零點起飛學java (劉升華) 高清PDF_IT教程網

資源名稱:零點起飛學java (劉升華) 高清PDF第1篇 java開發基礎第1章 java概述( 教學視頻:37分鐘) 2第2章 基本數據類型及運算( 教學視頻:52分鐘) 14第3章 java程序流程控制( 教學視頻:33分鐘) 36第4章 類與對…

【Spark】開發Spark選擇Java還是Scala?

Spark-Java-Scala-哪種語言 spark java 支持_百度搜索(1 封私信)Spark 中用 Scala 和 java 開發有什么區別? - 知乎(1 封私信)Spark平臺下,scala比java更有優勢么? - 知乎

vector 修改 java_java對vector動態數組中的對象排序,以下代碼有何問題,如何修改?...

展開全部package com.tx.collection;import java.util.Comparator;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.TreeMap;import java.util.TreeSet;import java.util.Vector;public class Student {String name;int score;public S…

hadoop的序列化與java的序列化區別

java的序列化機制 java序列化時會把具體類的數據和類的繼承結構信息都序列化傳遞。如下圖hadoop的序列化機制 序列化類的數據,但是不序列化類的繼承結構信息。 網絡傳遞的時候就少了很多流量,hadoop也不需要類的繼承關系,只要類的數據就夠…

java mail 已發送_JavaMail獲取已發送郵件

public static voidmain(String args[]) {Properties props new Properties(); //參數配置props.setProperty("mail.transport.protocol", "smtp"); //使用的協議(JavaMail規范要求)props.setProperty("mail.smtp.host", "smtp.exmail.qq.c…

ORA-08103: object no longer exists

今天工具箱報錯: ORA-08103: object no longer exists 查了原因,是有session在操作表,比如插入,更新等。而工具箱這個操作剛好在select表,所以報錯。-------下文是英文解釋----- ORA-08103: object no longer exists錯…

【Spark】Spark-空RDD判斷與處理

Spark-空RDD判斷與處理 SparkKafkaDemo - Streaming Statisticsrdd isempty count_百度搜索Spark RDD.isEmpty costs much time - Stack OverflowSpark Streaming中空RDD的處理-Spark-about云開發[SPARK-5270] Provide isEmpty() function in RDD API - ASF JIRA19 Spark Stre…

JDBC開發步驟

JDBC開發步驟: 1、加載數據庫驅動 2、通過DriverManager獲取數據庫連接Connection 3、通過Connection獲取Statement/PreparedStatement 4、將SQL語句綁定到Statement/PreparedStatement中去,準備向數據庫發送SQL語句 5、執行完sql語句后&#xff0c…

DAY3-“忙里偷閑”找你玩耍2018-1-11

接觸Java第三天,嘿嘿,今天近代史期末考試,提前一小時交卷,回宿舍繼續學習,中午去見女神姐姐了,每次見完女神姐姐都是滿滿地動力。這次女神姐姐告訴我們要好好規劃自己的時間,早上花20分鐘規劃好…

java 數據保存內存_java中的各種數據類型在內存中存儲的方式 一

1.java是如何管理內存的java的內存管理就是對象的分配和釋放問題。(其中包括兩部分)分配:內存的分配是由程序完成的,程序員需要通過關鍵字new為每個對象申請內存空間(基本類型除外),所有的對象都在堆(Heap)中分配空間。釋放:對象的…