放翁(文初)的一畝三分地

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            210 隨筆 :: 1 文章 :: 320 評(píng)論 :: 0 Trackbacks
           

          Author:放翁(文初)

          Date: 2010/4/14

          Email:fangweng@taobao.com

          圍脖: http://t.sina.com.cn/fangweng

          這部分是結(jié)果,大家可以當(dāng)看倒序的電影,后續(xù)會(huì)有前篇給出。

          Web服務(wù)異步化

                   包括兩部分,數(shù)據(jù)傳輸層異步化(大家已經(jīng)熟知的NIO),Http業(yè)務(wù)請(qǐng)求異步化(continuationsservlet3.0)。服務(wù)異步處理我將會(huì)有一個(gè)詳細(xì)的說明文檔(服務(wù)異步化的概念,服務(wù)異步化的幾種標(biāo)準(zhǔn)實(shí)現(xiàn),服務(wù)異步化容器的特點(diǎn)),后續(xù)給出。

          Web服務(wù)異步化測(cè)試原因

                   TOP應(yīng)用特殊性:

          1.自身服務(wù)能力由后端的服務(wù)能力決定。(對(duì)同步Web請(qǐng)求的轉(zhuǎn)發(fā))

          2.后端服務(wù)部署等同性,但要求服務(wù)互不影響。

          第一點(diǎn)導(dǎo)致TOP無(wú)法預(yù)估自身服務(wù)能力(不同后端服務(wù)處理速度下的TOP有不一樣的支持能力),同時(shí)也無(wú)法應(yīng)對(duì)在后端服務(wù)異常的情況下,整體的服務(wù)質(zhì)量。

          第二點(diǎn)導(dǎo)致TOP只有在物理上分隔不同服務(wù)提供者所對(duì)應(yīng)的TOP集群(資源浪費(fèi),同時(shí)無(wú)法動(dòng)態(tài)調(diào)整資源來(lái)滿足服務(wù)變化情況)。

                   因此需要對(duì)TOP實(shí)施web服務(wù)異步處理的測(cè)試。這里簡(jiǎn)單的說一下服務(wù)異步化的使用場(chǎng)景需要滿足的幾個(gè)特點(diǎn):

          1.       處理耗時(shí)大多消耗在于對(duì)后端或者外部服務(wù)資源的請(qǐng)求上。

          2.       后端或者外部資源在更多的流量下不會(huì)成為瓶頸。

          TOP來(lái)解釋一下:TOP自身處理主要包括路由,安全,流控等,但是最耗時(shí)的是在請(qǐng)求后端各個(gè)淘寶團(tuán)隊(duì)的服務(wù)。其次當(dāng)前后端服務(wù)能力尚未達(dá)到真實(shí)的處理高峰,因此很多請(qǐng)求被堵在TOP平臺(tái),特別是當(dāng)某些服務(wù)異常的時(shí)候,另一些服務(wù)就會(huì)被拖累無(wú)法得到充分利用。(當(dāng)然我們有流控,發(fā)現(xiàn)后端服務(wù)能力已經(jīng)成為瓶頸的時(shí)候可以對(duì)單獨(dú)服務(wù)作限制)。

          長(zhǎng)話短說,上測(cè)試結(jié)果……

          環(huán)境說明

          Linux 2.6.9-55.ELsmp

          4 Core

          4 G Memory

          JDK 1.6.0_07

          測(cè)試工具:loadRunner 9.5

          測(cè)試涉及到了四種容器部署:后面都會(huì)用縮寫在測(cè)試結(jié)果上注明

          1.       Apache + modjk + Jboss(后面縮寫為Jboss)

          此模式Apache配置如下:

          <IfModule mpm_worker_module>

          ServerLimit          80

          ThreadLimit          128

          StartServers         10

          MaxClients           10240

          MinSpareThreads      64

          MaxSpareThreads      800

          ThreadsPerChild      128

          MaxRequestsPerChild 10000

          </IfModule>

             Jbossweb容器配置如下:

          <Connector port="8009" address="${jboss.bind.address}" connectionTimeout="8000" protocol="AJP/1.3" maxThreads="500" minSpareThreads="40" maxSpareThreads="75" maxPostSize="512000" acceptCount="300" bufferSize="16384" emptySessionPath="false" enableLookups="false" redirectPort="8443" URIEncoding="utf-8"/>

          Jbossweb部分以APR模式啟動(dòng)。

          2.       Tomcat6APR

          關(guān)鍵配置如下:

          <Executor name="topThreadPool" namePrefix="top-exec-"

                  maxThreads="500" minSpareThreads="40"/>

              <Connector port="7777" protocol="HTTP/1.1"

                         executor="topThreadPool" connectionTimeout="20000" acceptCount="1000"

                         redirectPort="8444" />

          3.       Tomcat7 RC 4APR

          關(guān)鍵配置如下:

              <Executor name="topThreadPool" namePrefix="top-exec-"

                  maxThreads="500" minSpareThreads="4"/>

              <Connector executor="topThreadPool" port="3333" protocol="HTTP/1.1"

                         connectionTimeout="20000" acceptCount="1000"

                         redirectPort="6443" />

          4.       Jetty7

          關(guān)鍵配置如下:

          <Set name="ThreadPool">

                <!-- Default queued blocking threadpool -->

                <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">

                  <Set name="minThreads">10</Set>

                  <Set name="maxThreads">500</Set>

              </Set>

              <Call name="addConnector">

                <Arg>

                    <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">

                      <Set name="host"><SystemProperty name="jetty.host" /></Set>

                      <Set name="port"><SystemProperty name="jetty.port" default="6060"/></Set>

                      <Set name="maxIdleTime">300000</Set>

                      <Set name="Acceptors">2</Set>

                      <Set name="statsOn">false</Set>

                      <Set name="confidentialPort">8443</Set>

                      <Set name="lowResourcesConnections">20000</Set>

                      <Set name="lowResourcesMaxIdleTime">5000</Set>

                    </New>

                </Arg>

              </Call>

          附注:

          Asyn表示異步模式,syn表示同步。Asyn中還分成resumecomplete兩種方式,后續(xù)在介紹技術(shù)背景的時(shí)候詳細(xì)描述。

                   對(duì)于服務(wù)端的load不是每一個(gè)測(cè)試都做了記錄,選取了最全面的1500并發(fā)用戶做了測(cè)試。

                   最大服務(wù)請(qǐng)求處理數(shù)是通過應(yīng)用自身實(shí)現(xiàn),具體代碼可以參考后面的代碼附件。

          測(cè)試結(jié)果如下:

          場(chǎng)景1500 并發(fā)用戶場(chǎng)景下,后端服務(wù)一次請(qǐng)求消耗3秒鐘

          容器

          模式

          TPS

          Average Response Time(s)

          Average Throughput(byte/s)

          最大請(qǐng)求處理數(shù)

          Success rate

          Jetty7

          asyn(resume)

          162.8

          3.008

          38430

          500

          100%

          Tomcat6

          syn

          163.3

          3.005

          18453

          500

          100%

          這個(gè)場(chǎng)景測(cè)試的目的是比較在線程池資源足夠的時(shí)候,異步和同步的差別。(也就是TOP服務(wù)器所有的資源處于正常服務(wù),前臺(tái)請(qǐng)求沒有因?yàn)榍岸芜B接被消耗完,導(dǎo)致服務(wù)質(zhì)量降低)

                   可以看到,在TPSResponse Time上兩者基本上沒有太大差別,TPS就等于500/3=167左右(3秒一個(gè)請(qǐng)求,因此用這種簡(jiǎn)單算式可以算出),響應(yīng)時(shí)間也較為正常。當(dāng)時(shí)我發(fā)現(xiàn)在每秒吞吐量上有些差別,后來(lái)單個(gè)測(cè)試case跑了一下,發(fā)現(xiàn)是返回的http header比較大,應(yīng)該是在做異步化時(shí)重入等作的一些標(biāo)識(shí)(后面其他容器的異步化也是一樣)。

                   最大處理請(qǐng)求數(shù)都在服務(wù)端后臺(tái)看到是500,等同于最大的并發(fā)用戶數(shù)。

          場(chǎng)景21000 并發(fā)用戶場(chǎng)景下,后端服務(wù)一次請(qǐng)求消耗3秒鐘

          容器

          模式

          TPS

          Average Response Time(s)

          Average Throughput(byte/s)

          最大請(qǐng)求處理數(shù)

          Success rate

          Jetty7

          asyn(resume)

          317.06

          3.036

          74826

          1000

          100%

          Tomcat6

          syn

          163.323

          5.904

          18455

          500

          100%

                   場(chǎng)景2就在資源不足的情況下,比較異步服務(wù)請(qǐng)求與同步請(qǐng)求處理能力。(例如由于后端某些服務(wù)比較慢,導(dǎo)致前段的服務(wù)器能夠承載的請(qǐng)求數(shù)目超過了線程數(shù))

                   這個(gè)場(chǎng)景的結(jié)果可以看到TPS在異步模式下與并發(fā)用戶數(shù)呈現(xiàn)同步增長(zhǎng),就好比配置了1000個(gè)線程作為線程池一樣,同樣在后端打出的最大請(qǐng)求數(shù)上也證明了這一點(diǎn),因此前段線程池的服務(wù)能力在異步的情況下充分復(fù)用(當(dāng)然這里使用的異步服務(wù)處理使用的是NIO而不是BIOConnector)。同樣在吞吐量上依然是增加的,由于異步附加的內(nèi)容。

          場(chǎng)景31500 并發(fā)用戶場(chǎng)景下,后端服務(wù)一次請(qǐng)求消耗3秒鐘

          容器

          模式

          TPS

          Average Response Time(s)

          Average Throughput(byte/s)

          Server Load

          Success rate

          Jboss

          syn

          75.546

          5.347

          21002

          0.115

          68%

          Jetty7

          Syn

          163.156

          8.788

          19252

          0.129

          100%

          Jetty7

          Asyn(complete)

          432.153

          3.312

          76491

          2.649

          100%

          Jetty7

          Asyn(resume)

          423.638

          3.375

          99979

          2.826

          100%

          Tomcat6

          Syn

          163.836

          8.75

          18513

          0.258

          100%

          Tomcat7

          ASyn

          423.501

          3.328

          54632

          1.064

          99.3%

          場(chǎng)景三比對(duì)了現(xiàn)有TOP的部署模式(Apache + modjk + Jboss)和Jetty7的同步模式,兩種異步模式,Tomcat同步模式,Tomcatservlet3.0異步模式的處理情況。根據(jù)測(cè)試可以得到的信息如下:

          1.              現(xiàn)有部署方式在后端服務(wù)處理耗時(shí)較大的情況下,處理能力不如Jetty7Tomcat6,同時(shí)出錯(cuò)率很高。

          2.              Jetty7的同步處理測(cè)試結(jié)果和Tomcat6的同步處理測(cè)試結(jié)果很類似,但是load方面jetty7更好。

          3.              異步處理方面Jetty7的兩種方式基本上差別不大(后續(xù)還需要深入源碼看看對(duì)于數(shù)據(jù)緩存資源復(fù)用的狀況),Tomcat7的異步處理成功率有些問題(錯(cuò)誤多半是在獲取response回寫的時(shí)候,response已經(jīng)被提前釋放,看來(lái)Tomcat7還是需要一些時(shí)間來(lái)考驗(yàn)),load上來(lái)說tomcat結(jié)果比較好。

          4.              異步請(qǐng)求在提高處理能力的情況下,對(duì)于資源消耗也較大(線程切換較為頻繁),不過還是在承受范圍。

          三個(gè)場(chǎng)景組合比較:

          容器

          并發(fā)用戶

          模式

          TPS

          Average Response Time(s)

          Average Throughput(byte/s)

          Success rate

          Jetty7

          500

          asyn(resume)

          162.8

          3.008

          38430

          100%

          Jetty7

          1000

          asyn(resume)

          317.06

          3.036

          74826

          100%

          Jetty7

          1500

          asyn(resume)

          423.638

          3.375

          99979

          100%

          Tomcat6

          500

          syn

          163.3

          3.005

          18453

          100%

          Tomcat6

          1000

          syn

          163.323

          5.904

          18455

          100%

          Tomcat6

          1500

          Syn

          163.836

          8.75

          18513

          100%

          最后將三個(gè)場(chǎng)景合并起來(lái)做一個(gè)簡(jiǎn)單的比較,得到信息如下:

          1.       隨著并發(fā)用戶的增加,本身異步處理也會(huì)有衰減,同時(shí)對(duì)于性能消耗(線程切換)也會(huì)不斷增長(zhǎng)。

          2.       異步化在消息頭上會(huì)增加一些數(shù)據(jù),會(huì)增加回寫的帶寬消耗(不過量不大),一個(gè)請(qǐng)求增加了100byte左右的消息數(shù)據(jù)。

          測(cè)試總結(jié):

          1.       Web請(qǐng)求異步化在TOP很合適。

          重復(fù)兩個(gè)條件:

          a.       處理耗時(shí)大多消耗在于對(duì)后端或者外部服務(wù)資源的請(qǐng)求上。

          b.       后端或者外部資源在更多的流量下不會(huì)成為瓶頸。

          2.       Web請(qǐng)求異步化在Jetty67上已經(jīng)經(jīng)歷了2年多的成長(zhǎng)(Google App Engine , Yahoo Hadoop),穩(wěn)定性和效率較好。(同時(shí)很多優(yōu)化可以通過擴(kuò)展自行定制,jetty的可擴(kuò)展性很好Tomcat7servlet3上處于剛發(fā)布階段,還有待繼續(xù)完善。(Servlet3的另一種模式尚未執(zhí)行成功,直接導(dǎo)致jvm退出)

          后續(xù)需要繼續(xù)跟進(jìn)的:

          1.       對(duì)于大數(shù)據(jù)量請(qǐng)求的容器間性能對(duì)比。(圖片上傳或者大數(shù)據(jù)量的Post請(qǐng)求)

          2.       容器安全性。(是否容易被攻擊)

          3.       代碼遷移成本。

          后續(xù)篇涉及:服務(wù)異步化的概念,服務(wù)異步化的幾種標(biāo)準(zhǔn)實(shí)現(xiàn),服務(wù)異步化容器的特點(diǎn)和實(shí)現(xiàn),現(xiàn)有容器可優(yōu)化的點(diǎn)。

           打個(gè)廣告:http://blog.open.taobao.com/archives/1417 TOP需要人才加入

          posted on 2010-06-13 14:35 岑文初 閱讀(4430) 評(píng)論(9)  編輯  收藏

          評(píng)論

          # re: Web服務(wù)請(qǐng)求異步化測(cè)試 2010-06-13 15:30 melin
          期待后續(xù)的文章......  回復(fù)  更多評(píng)論
            

          # re: Web服務(wù)請(qǐng)求異步化測(cè)試 2010-06-22 17:53 孔夫子
          作者的博客好多文章,估計(jì)要看很久。
          我也說幾句吧,呵呵,免費(fèi)看了你這么多文章,估計(jì)你寫的也挺辛苦的。
          其實(shí)技術(shù),現(xiàn)在在web這一塊,基本上都沒有技術(shù)含量,當(dāng)然java也不例外。
          技術(shù)不應(yīng)該是重點(diǎn),應(yīng)用才是重點(diǎn)。
          技術(shù)需要的就是使用,多用用就會(huì)了,當(dāng)然多花些時(shí)間也是要的。呵呵,我覺得技術(shù)最重要的是創(chuàng)新,但可惜創(chuàng)新很難哦。
          技術(shù)人員很喜歡陶醉在技術(shù)里面,其實(shí)說真的,真的沒有什么東西好鉆研的。需要鉆研的其實(shí)是技術(shù)以外的東西。可惜很多人都走火入魔,九陰真經(jīng)倒著練。
          其實(shí)我要表達(dá)的觀點(diǎn)是技術(shù)不難,難在創(chuàng)新而已。技術(shù)人員關(guān)心的不應(yīng)該在技術(shù)本身上。
          完了,這就是我的觀點(diǎn),呵呵,肯定很多人會(huì)反對(duì)我的觀點(diǎn)。
          多花些時(shí)間在別的上面吧,花在哪都比花在技術(shù)上好啊




            回復(fù)  更多評(píng)論
            

          # re: Web服務(wù)請(qǐng)求異步化測(cè)試 2010-06-23 10:41 岑文初
          @孔夫子
          首先技術(shù)的目標(biāo)就是服務(wù)客戶,這就是最更本的要求,否則就是一個(gè)沒有畢業(yè)的大學(xué)生,因此我所涉及的內(nèi)容不會(huì)為了技術(shù)而技術(shù),是產(chǎn)品需要而生。其次,這年頭一堆人搞忽悠,沒有人踏踏實(shí)實(shí)的寫點(diǎn)代碼,基本不靠譜,同時(shí)創(chuàng)新不是腦袋里蹦出來(lái)的,而是在使用前人已有的技術(shù)時(shí)發(fā)現(xiàn)無(wú)法滿足需求才去思索和實(shí)踐得到的結(jié)果,整天想著創(chuàng)新卻不踏踏實(shí)實(shí)的干點(diǎn)事情,那就是等著天上掉餡餅,呵呵,不多說,仁者見仁,智者見智,少一些抱怨,多一些實(shí)干,把平凡的事情做的不平凡那就夠了  回復(fù)  更多評(píng)論
            

          # re: Web服務(wù)請(qǐng)求異步化測(cè)試 2010-06-23 11:57 孔夫子
          @岑文初
          仁兄還是沒理解我的話,我不是說不要技術(shù),而是說不要因此走火入魔,舍本求末,我本人曾經(jīng)看過一個(gè)幾千萬(wàn)的項(xiàng)目栽在一個(gè)浙大技術(shù)狂徒手上而一文不值,對(duì)設(shè)計(jì)模式,對(duì)代碼規(guī)范本身,對(duì)架構(gòu),這些都不要太過,我見過一個(gè)年輕人為了一個(gè)設(shè)計(jì)一個(gè)向?qū)В瑥脑O(shè)計(jì)模式,從通用性,從耦合度,甚至從架構(gòu)上考慮,我當(dāng)時(shí)對(duì)他說你走火入魔了,九陰真經(jīng)倒著練,可惜對(duì)走火的人這種話是聽不進(jìn)去的,過猶不及。
          我以為真正的高手,眼里是沒有技術(shù),沒有語(yǔ)言的,只有流程、規(guī)范、標(biāo)準(zhǔn)、業(yè)務(wù),用戶需求,這或許就是無(wú)招勝有招吧。
          我本人可以左右的項(xiàng)目,我是堅(jiān)決不用spring,hibernate,struts,jquery這些的,更別說更花哨的,因?yàn)槲也幌肷岜厩竽?nbsp; 回復(fù)  更多評(píng)論
            

          # re: Web服務(wù)請(qǐng)求異步化測(cè)試 2010-06-23 12:12 岑文初
          @孔夫子
          這么說我同意,呵呵,學(xué)形,學(xué)意或者悟道都是不斷進(jìn)步的,這也是我們這些老家伙為什么會(huì)比新人值錢的原因,如果僅僅關(guān)注技術(shù)外在那么做個(gè)五年還就是一個(gè)熟練工  回復(fù)  更多評(píng)論
            

          # re: Web服務(wù)請(qǐng)求異步化測(cè)試 2010-06-24 00:32 一意孤行
          @岑文初
          關(guān)于老家伙為什么比新人值錢,我曾經(jīng)跟我老板有過對(duì)話。我說你一個(gè)月給我2w,是否有考慮過招2個(gè)1w的,或者是4個(gè)5千的,或者是5個(gè)4千的。我老板的回答是我肯定還是要你,甚至我可以還可以給你更多。因?yàn)槟銓懙拇a我放心,我不能讓那些新人來(lái)我這里練兵,bug一大堆,那還賺什么錢,再說了最后你讓他們寫,最后你發(fā)覺還是還是要你自己寫。
          這是老板的考慮,我覺得很貼切。其實(shí)bug才是值錢的因素。沒有那么多其他的原因。
          其實(shí)我不喜歡blogjava,這里面技術(shù)太濃了,光怎么用struts,hibernate,spring,還有一些稀奇古怪的技術(shù)框架一大堆,這是舍本求末的。
          我提到過taobao api must die,可能很殘忍,但是其實(shí)這并不是一件不好的事情,任何一家要成為偉大公司的,沒有經(jīng)歷過這或那的失敗也是不可能的。
          只是真的很不希望這么多人陷在技術(shù)的泥潭里而不能自拔。青春雖然是用來(lái)?yè)]霍的,但揮霍在這些上真的不值得。
          其實(shí)現(xiàn)在很少跟人這么交流了,只是看到仁兄這么好的才華,惺惺相惜,擔(dān)心對(duì)于技術(shù)太過于癡迷,畢竟這樣的人我見了不少。
          我本來(lái)在blogjava里面也有幾篇文章的,后面也都刪了,總有點(diǎn)擔(dān)心誤人子弟。






            回復(fù)  更多評(píng)論
            

          # re: Web服務(wù)請(qǐng)求異步化測(cè)試 2010-06-24 00:47 一意孤行
          想來(lái)這些年,java,c++,js,php,flash都玩過,數(shù)據(jù)庫(kù)更是玩了一遍,但我從不鉆研,都是用前先看,用后就扔的原則,所以我很不喜歡那些問你hashmap和hashtable區(qū)別是什么,java的一些技術(shù)問題,c++智能指針的問題,唯一一次印象深刻的是我老板面試時(shí)問我,你覺得軟件開發(fā)最難的地方在哪呢?當(dāng)時(shí)著實(shí)讓我想了好久。
          技術(shù)可以用來(lái)玩,但不能隨便在項(xiàng)目里面玩,這點(diǎn)很重要。
          其實(shí)還是性格問題,技術(shù)人員都不喜歡主動(dòng)發(fā)言交流,不喜歡走進(jìn)客戶,不喜歡走出去問客戶到底要什么,所以說中國(guó)的軟件很適合外包。

            回復(fù)  更多評(píng)論
            

          # re: Web服務(wù)請(qǐng)求異步化測(cè)試 2010-06-24 00:59 岑文初
          @一意孤行
          呵呵,大部分都同意啦,只是有句俗話說的好:少不讀三國(guó),老不讀紅樓,在適合的時(shí)候做適合的事情,青春就是用來(lái)燒的,這也是將來(lái)成熟的一種歷練。感謝你對(duì)我的關(guān)注,對(duì)我來(lái)說,技術(shù)是一種愛好,但是現(xiàn)在我更在乎的是產(chǎn)品,不再會(huì)和過去一樣為了技術(shù)而技術(shù),如何用技術(shù)來(lái)支持產(chǎn)品滿足用戶是我在乎的(當(dāng)然設(shè)計(jì)的好的架構(gòu)(不是啥開源框架,呵呵)在用戶需求不斷變化的時(shí)候可以更快的響應(yīng),能夠前瞻到用戶的潛在需求,挖掘出用戶真正的需求)。最后貼一段我的Boss(菲青)前一陣子給我的一段評(píng)語(yǔ):回放翁的文章。放翁和自雪應(yīng)該是阿里/淘寶開放的先行者。從08年我們開始干開放的活兒,就是大家從無(wú)到有的累積。當(dāng)然,新業(yè)務(wù)的建立需要時(shí)間,革命尚未成功。但是,看到放翁的轉(zhuǎn)變從一個(gè)技術(shù)狂愛者到一個(gè)以業(yè)務(wù)為支撐的技術(shù)專家,我很佩服他的成長(zhǎng),也感覺TOP很幸運(yùn)有了這些人,才使得TOP能夠繼續(xù)成長(zhǎng)。我們的目標(biāo)是以技術(shù)來(lái)支撐,改變業(yè)務(wù)產(chǎn)品,但不是技術(shù)主導(dǎo)業(yè)務(wù)。當(dāng)然,因?yàn)槲覀兞髁考皹I(yè)務(wù)復(fù)雜度的關(guān)系,這中間沉淀下來(lái)的技術(shù)含量絕不亞于淘寶內(nèi)部的一些大型系統(tǒng)!  回復(fù)  更多評(píng)論
            

          # re: Web服務(wù)請(qǐng)求異步化測(cè)試 2010-06-24 08:52 jollyant
          不能為了技術(shù)而技術(shù),而是為了滿足用戶需求而是用技術(shù)~
          但是任何滿足用戶需求的產(chǎn)品都是以技術(shù)支撐的
          任何一個(gè)真正的高手都不是天生就是高手,無(wú)招勝有招,是需要先從手中無(wú)招到手中有招再到心中無(wú)招的,這個(gè)過程是一定要經(jīng)歷的~
          首先要學(xué)習(xí)吸收別人先進(jìn)的思想,才能讓自己成為真正的高手~
          目前所使用的技術(shù)都是前人經(jīng)過千辛萬(wàn)苦開發(fā)出來(lái)的~
          沒有人能到不用別人開發(fā)的技術(shù),光靠自己就能滿足用戶的需求吧?!用什么東西去滿足用戶的需求呢?!
          在手中無(wú)招的時(shí)候去討論要心中無(wú)招,只能誤導(dǎo)別人,把新人帶到溝里去~
          學(xué)形,學(xué)意,會(huì)意,悟道~~這個(gè)過程終歸是要經(jīng)歷的
          或許能有一些天才人物從零開始,直接悟道的吧~呵呵
          當(dāng)然還是希望不要做技術(shù)狂人,而成為一個(gè)以業(yè)務(wù)為支撐的技術(shù)專家
            回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 永福县| 稷山县| 浏阳市| 平罗县| 崇左市| 古蔺县| 黔南| 黄龙县| 宜川县| 柳州市| 宁海县| 隆德县| 平阳县| 封开县| 黔江区| 巴青县| 科尔| 和田市| 承德县| 寿宁县| 修文县| 孟津县| 浙江省| 丹阳市| 湘西| 平江县| 界首市| 太原市| 民丰县| 怀远县| 河东区| 汪清县| 宜川县| 永福县| 灵台县| 夏邑县| 汶川县| 沙雅县| 木里| 麦盖提县| 湛江市|