請不要介意我用的是繁體字。。。
好久沒有參加過聚會了,這次架構師大會怎麼著也得參加,於是我買了門票希望能夠聽到一些不同的東西。雖然最後由於時間由於各種安排,我有一些期望的沒有聽到,但還是聽到了一些比較有興趣的東西。
一、贊助商
為什麼要提這個?畢竟現在各種社區為什麼舉辦不起來?原因有很多,其中有一部分就是因為沒有錢,你想啊,租場地要錢、租設備要錢、錄像要錢,什麼東西都是 靠錢來支撐。如果人來得少了,大家出的份子錢還不夠付付場地費啥的,這時候你也不能讓人加錢吧?如果人來得多了,原先準備的小場地可能就不夠用,或許就會 有人感到不滿意,甚至以後就可能不願來參加。
如果有錢,再加上一群有激情的人,這樣的社區就能夠延續下去,也只有這樣,社區才能延續下去。當然理想情況下,社區應該是自己能夠造血,而不是靠別人來輸血,只有自己能夠造血了,對於外在的壓力才會減輕。
所以,感謝這次的贊助商,也正因為他們,我們才有機會聽到這些知名人士或者說有才華的人給我們的技術分享
二、技術點
大概是因為thinkinlamp舉辦的緣故,所以大家基本上都是講的php相關的技術點。也正因此,更容易被大家所接受和理解。當然今天的技術點並不是 完全與PHP相關,畢竟這是架構師大會。可是誰又能真正的描述什麼是架構師呢?軟件架構師、系統架構師等都能稱為架構師,而今天的分享就幾乎都包含了這些 內容。
1、張爾寧:安居客的架構變遷。張爾寧講的幾點正好是我關注的,搜索和圖片存儲,後期又補充了一些代碼部署和數據統計、數據監控、系統監控等
搜索用的是solr,以前沒有關注過,以後會稍微看看。但圖片存儲這一塊確實是我關心的,雖然我的量肯定沒有安居客大,但我每天也會產品將近2G左右的圖片,嗯,這幾乎是指原圖。如果再算上縮略圖等,那至少也是3G左右,雖然增長幅度不高,但畢竟也在緩慢增加。100天下來,也有300G左右的數據了,雖然磁盤不值錢,但流量值錢啊。再說了就算不值錢,多少塊硬盤也經不起這樣折騰啊。於是它的圖片的存儲方式我就相對比較關注了(我這裏不介紹,事後應該有PPT,大家可以圍觀,否則我這裏就會有太多話想說了)。
然後對安居客的一些小產品和小功能有一些想法。我不知道現在有多少公司會向安居客這樣,因為使用了solr,所以又額外做了一些solr的管理程序;因為要部署代碼,甚至實現了一些簡單的github的界面;為了要管理xxxx,最後又實現了一引起xxx的管理軟件;其實我挺羨慕安居客的,至少他們的頭願意看到他們折騰也願意讓他們折騰。有一些boss就無法理解,為什麼不把本職工作做做好,做一些一個星期只能使用一兩次的WEB管理程序。這其實是很多公司的通病。不講了,再講就變成發牢騷了。不過,這些小工具的實現確實簡化了很多工作,所以我也只能是羨慕:人多啊,人多了想做什麼事情的時候都有人做。 人少的時候,事情都做不完,怎麼有空做這些東西?
2、周愛民:架构表达方法中的界面及其原则。周愛民是一個名人,我一直有訂閱他的博客,只是這兩年更新的少了。他的書除了delphi那本沒有看過外,其他的都算是看過了。今天是第一次看到真人,有點失望,長的不太象大師(開個玩笑)。不過他講的東西就是一個軟件架構師在做的事情了。怎麼樣讓架構能夠適合更多的變化。用aimingoo的話來說,架構橫切、豎切、外包圍 都是一種方法,每種方法都各有優劣,只是現在橫切用的比較多一點。(橫切:假設架構是一個正方型,橫切就橫過來一刀,一些基礎構架,一些是應用核心,希望沒有理解錯)。
周愛民還提出了一些觀點:
1.框架和库的区别:框架有明确的系统原则和模块原则
2.服务和层次化理论:服务是一种“库”、需要解除一些逻辑依赖
當然在提出這些觀點的時候,他是拿Erlang中的一些編程規範來說的,我記得最清楚的就是:盡量少用防禦性編程。
不可否認,很多時候爛代碼都是從防禦性編程裏產出的。
3、程輝:LAMP in Cloud --- 新浪SAE架构与设计。這個確實是我今天比較感興趣的話題之一。因為在沒有用SAE之前,自己也嘗試對PHP做過簡單的封裝,讓他僅用來跑一個小項目,而可以忽略其他的平臺因素。在今天看來,這種做法其實並不是特別可取,因為它犧牲了可擴展性。不過在5.4的時候,PHP也能夠自己就能夠實現成一個小型 Webserver,所以以前的想法又可以付諸實施了。
當然新浪SAE不可能這麼簡單,否則它今天就不可能做在這裏講解了。SAE的早期版本只是實現了一個php的runtime,只是為了這個runtime的安全,他們在上面又加上了zend sandbox和http sandbox,各種各樣的沙盒,使得runtime被攻擊的概率減少了很多。說白了,又有點象java的JVM吧,只是JVM又沒有phprumtime靈活。為了避免因為沙盒帶來的影響,sae又模擬實現了很多東西,比如curl庫(這個在早期的版本中是絕對不支持的,經歷了好多版本後才有這個支持),SAE也提供了一些基本的類庫:圖片處理、LBS、郵件發送、memcache、RDC、Counter、KVDB等等,這些小功能的實現使得用戶在遷移的時候能夠將問題最小化。
嗯,我就將yii做了一些簡單的二次開發,使得它支持SAE,我擴展的yiiforsae與另一位朋友的yii4sae不太一樣。將程序遷移到SAE平臺上最大的問題是兩個:1、上傳2、存儲3、緩存,其他的使用都差不多。因為SAE基於SVN,所以在它的項目裏就不支持通過程序生成文件,生成在項目目錄下。只能使用STorageWrapper將文件寫入到存儲中去。就這個比較繁。
SAE還對.htaccess進行了重封裝,只支持一些基礎功能,這些也足夠了。
SAE對我最大的啟發提10個版本庫。這個在SAE第一次推出的時候就有了,非常實用,因為你可以在兩個版本庫之間隨意切換,即,你在v2.xxx.com上進行開發,當測試完成後,將代碼的默認庫設置為v2即可,只要操作一下鼠標就完成了。如果發現有重大問題,繼續點一下鼠標 。一切就是這樣的簡單。
SAE宣傳的就是穩定、安全、保密。陳輝說了,如果你不放心,你可以上傳ZG處理過的代碼。
4、陈思儒 :《AMOEBA(变形虫)的架构以及使用》。說實話這個話題我的興趣不是很大,我並非說陳恩儒的東西不好,而且這個玩意大家現在都在玩一個思想。如果真要說,那SAE的RDC已經有它的類似效果了,當然可能性能不如它。不過在目前變形蟲 還不穩定的基礎上,相信沒有多少人願意當小白鼠。
不過它的一些策略、處理流程都是可以值得借鑒的。話說,我也沒有覺得lua都很難學吧?
amoeba的一個缺點在於,因為他支持了多庫多表的即時查詢,所以,對於聚合類的函數,就無法支持了。
當然,尺有所短,寸有所長,思想是可以用來借鑒的
5、潘曉良:百姓网的“非典型”架构之路。這個分享也是我感興趣的。自從第一次知道客齊集後,後面對於它們的關注就相對比較多,只是後來突然消失了不少時間。百姓綱介紹中說他們的代碼是越來越少越來越少,現在只有7萬行不到了。而在之前的分享中張爾寧說他們的代碼有數十萬行代碼了。百姓網的代碼卻還在精簡(這不正是持續重構嗎?)潘曉良說了一點我非常受用:讓用戶盡可以快的打開網站。這點非常重要,現在很多公司為了好看,大量的CSS加上大量的圖片,使得在訪問的時候光這些圖片和CSS的加載就消耗了好多時間,他們怎麼就沒從用戶角度 想?
潘曉良介紹百姓網的架構變遷時用了四個詞做代表:遷移、減少、增加、平衡。當然前面兩個是百姓網的特殊歷史原因所造成的就不做多提了。增加,怎麼增加,對我們來說就很關鍵了,要知道程序不是說你加一臺服務器就自動將性能提升1倍了,要改很多東西。雖然潘曉良沒有提,但,因為他們從最多開始就是40臺左右的服務器,相信這些問題在初期就已經被處理或者已經遇到過了。後期這些都不是問題了。
順便說一下,百姓網才18個工程師。糾結啊,18個人做了這麼多的事情。
潘曉良還提了一下,說是百姓網並沒有用了一些多麼高深的架構,相反他們的WEB只有10臺,DB6、7臺,搜索好幾臺。並沒有多麼複雜的架構,他只是很得意說,他們的負載均衡是硬件的,用的很爽。
最後他還是總結了一下:架构是对目标的极致的最求。確實,架構不是越複雜越好,而在對極致的追求中所掌握好的平衡。
三、嘉賓致辭
幾個嘉賓的致辭也很有意思,時間都比較短,除了安居客的倪军是以講故事的方式介紹了某個架構師的成長歷程,其餘的幾位都是在介紹自己的產品。比如 海丁網、比如愛可生,嗯,我想了想,是啊,人家都贊助了,怎麼也得讓人家介紹一下自己的產品吧。再加上時間也不長,也能夠接受。我在這裏就不多談了。
四、隨想
嗯,我還是不太喜歡互動,雖然在周愛民的提問上有想過要回答那個為什麼傳入對象而不是ID,帶來的後果。其實從當時的PPT上可以很簡單的看出,那個函數大致是這樣:checkXxxxFromCompany,但結果,傳遞進去的是一個pueOrder對象。雖然在函數中是取得了這個pueOrder.getCompanyId(),但這本身就與設計不符。
不過,不喜歡互動好象是程序員的通病。很多人都不太喜歡交流,不知道自己想要說些什麼,也不知道如何將自己的想法傳達給別人,這確實是需要鍛煉的。
在結束的時候套用一句很早的臺詞:相聲(演講)是一門語言藝術。要想掌握好還是很有難度啊。