<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

         摘要: from:http://agapple.iteye.com/blog/1005918背景    周五下班回家,在公司班車上覺得無聊,看了下btrace的源碼(自己反編譯)。 一些關(guān)于btrace的基本內(nèi)容,可以看下我早起的一篇記錄:btrace記憶    上一篇主要介紹的是btrace的一些基本使用以及api,這里我想從btrace源碼本...  閱讀全文
    posted @ 2015-12-18 18:08 小馬歌 閱讀(384) | 評論 (0)編輯 收藏
     

    很多時候在online的應(yīng)用出現(xiàn)問題時,很多時候我們需要知道更多的程序的運(yùn)行細(xì)節(jié),但又不可能在開發(fā)的時候就把程序中所有的運(yùn)行細(xì)節(jié)都打印到日志上,通常這個時候能采取的就是修改代碼,重新部署,然后再觀察,但這種方法對于online應(yīng)用來說不是很好,另外一方面如果碰到不好改的代碼,例如引用的其他的外部的包什么的,就很麻煩了,BTrace就是一個可以在不改代碼、不重啟應(yīng)用的情況下,動態(tài)的查看程序運(yùn)行細(xì)節(jié)的工具,其官方網(wǎng)站在此:http://kenai.com/projects/btrace/ ,在這篇blog中,就來看看如何用BTrace來動態(tài)的監(jiān)測方法的一些運(yùn)行細(xì)節(jié)狀況。
    BTrace通過動態(tài)的掛接用java寫的代碼到運(yùn)行時上來獲取到一些運(yùn)行細(xì)節(jié),例如典型的使用btrace的方法為:
    btrace -cp [btrace的jar所在的路徑,默認(rèn)為btrace/build下] [pid] [需要運(yùn)行的java代碼]
    例如一段這樣的代碼:
    [java]
    import java.util.Random;
    public class Case1{

    public static void main(String[] args) throws Exception{
    Random random=new Random();
    CaseObject object=new CaseObject();
    boolean result=true;
    while(result){
    result=object.execute(random.nextInt(1000));
    Thread.sleep(1000);
    }
    }

    }
    public class CaseObject{

    private static int sleepTotalTime=0;

    public boolean execute(int sleepTime) throws Exception{
    System.out.println("sleep: "+sleepTime);
    sleepTotalTime+=sleepTime;
    Thread.sleep(sleepTime);
    return true;
    }

    }
    [/java]
    如在程序運(yùn)行的情況下,想知道調(diào)用CaseObject的execute方法的以下幾種情況,在BTrace中可以這么做:
    1、調(diào)用此方法時傳入的是什么參數(shù),返回的是什么值,當(dāng)時sleepTotalTime是多少?
    BTrace腳本如下:
    [java]
    import static com.sun.btrace.BTraceUtils.*;
    import com.sun.btrace.annotations.*;

    @BTrace public class TraceMethodArgsAndReturn{
    @OnMethod(
    clazz="CaseObject",
    method="execute",
    location=@Location(Kind.RETURN)
    )
    public static void traceExecute(@Self CaseObject instance,int sleepTime,@Return boolean result){
    println("call CaseObject.execute");
    println(strcat("sleepTime is:",str(sleepTime)));
    println(strcat("sleepTotalTime is:",str(get(field("CaseObject","sleepTotalTime"),instance))));
    println(strcat("return value is:",str(result)));
    }
    }
    [/java]
    然后直接執(zhí)行btrace -cp btrace/build [pid] TraceMethodArgsAndReturn.java就可以了。
    當(dāng)程序中調(diào)用到caseobject的execute方法時,就會在btrace的console中輸出相應(yīng)的信息。
    2、execute方法執(zhí)行耗時是多久?
    BTrace腳本如下:
    [java]
    import static com.sun.btrace.BTraceUtils.*;
    import com.sun.btrace.annotations.*;

    @BTrace public class TraceMethodExecuteTime{

    @TLS static long beginTime;

    @OnMethod(
    clazz="CaseObject",
    method="execute"
    )
    public static void traceExecuteBegin(){
    beginTime=timeMillis();
    }

    @OnMethod(
    clazz="CaseObject",
    method="execute",
    location=@Location(Kind.RETURN)
    )
    public static void traceExecute(int sleepTime,@Return boolean result){
    println(strcat(strcat("CaseObject.execute time is:",str(timeMillis()-beginTime)),"ms"));
    }
    }
    [/java]
    3、誰調(diào)用了execute方法?
    BTrace腳本如下:
    [java]
    import static com.sun.btrace.BTraceUtils.*;
    import com.sun.btrace.annotations.*;

    @BTrace public class TraceMethodCallee{
    @OnMethod(
    clazz="CaseObject",
    method="execute"
    )
    public static void traceExecute(){
    println("who call CaseObject.execute :");
    jstack();
    }
    }
    [/java]
    4、有沒有人調(diào)用CaseObject中的哪一行代碼?
    BTrace腳本如下:
    [java]
    import static com.sun.btrace.BTraceUtils.*;
    import com.sun.btrace.annotations.*;

    @BTrace public class TraceMethodLine{
    @OnMethod(
    clazz="CaseObject",
    location=@Location(value=Kind.LINE,line=5)
    )
    public static void traceExecute(@ProbeClassName String pcn,@ProbeMethodName String pmn,int line){
    println(strcat(strcat(strcat("call ",pcn),"."),pmn));
    }
    }
    [/java]
    從上面可看出,在有了BTrace后,要動態(tài)的跟蹤代碼的運(yùn)行細(xì)節(jié)還是非常爽的,更多的細(xì)節(jié)的操作請大家查看BTrace的User Guide

    posted @ 2015-12-18 14:52 小馬歌 閱讀(311) | 評論 (0)編輯 收藏
     
    mvn install:install-file -Dfile=D:/spymemcached-2.10.3.jar -DgroupId=net.spy -DartifactId=spymemcached -Dversion=2.10.3 -Dpackaging=jar
    mvn install:install-file -Dfile=D:/spymemcached-2.10.3-sources.jar -DgroupId=net.spy -DartifactId=spymemcached -Dversion=2.10.3 -Dpackaging=jar -Dclassifier=sources
    mvn install:install-file -Dfile=D:/spymemcached-2.10.3-javadoc.jar -DgroupId=net.spy -DartifactId=spymemcached -Dversion=2.10.3 -Dpackaging=jar -Dclassifier=javadoc
    posted @ 2015-12-17 18:58 小馬歌 閱讀(291) | 評論 (0)編輯 收藏
     

    很榮幸,作為這樣一款業(yè)界使用率和好評率出眾的RPC框架的維護(hù)者,今天這個文章主要是想幫助那些熱愛開源的同學(xué),更好的來研究dubbo的源代碼。

     一、Dubbo整體架構(gòu)

    1、Dubbo與Spring的整合
    Dubbo在使用上可以做到非常簡單,不管是Provider還是Consumer都可以通過Spring的配置文件進(jìn)行配置,配置完之后,就可以像使用spring bean一樣進(jìn)行服務(wù)暴露和調(diào)用了,完全看不到dubbo api的存在。這是因為dubbo使用了spring提供的可擴(kuò)展Schema自定義配置支持。在spring配置文件中,可以像、這樣進(jìn)行配置。META-INF下的spring.handlers文件中指定了dubbo的xml解析類:DubboNamespaceHandler。像前面的被解析成ServiceConfig,被解析成ReferenceConfig等等。
    2、jdk spi擴(kuò)展
    由于Dubbo是開源框架,必須要提供很多的可擴(kuò)展點(diǎn)。Dubbo是通過擴(kuò)展jdk spi機(jī)制來實現(xiàn)可擴(kuò)展的。具體來說,就是在META-INF目錄下,放置文件名為接口全稱,文件中為key、value鍵值對,value為具體實現(xiàn)類的全類名,key為標(biāo)志值。由于dubbo使用了url總線的設(shè)計,即很多參數(shù)通過URL對象來傳遞,在實際中,具體要用到哪個值,可以通過url中的參數(shù)值來指定。
    Dubbo對spi的擴(kuò)展是通過ExtensionLoader來實現(xiàn)的,查看ExtensionLoader的源碼,可以看到Dubbo對jdk spi做了三個方面的擴(kuò)展:

    (1)jdk spi僅僅通過接口類名獲取所有實現(xiàn),而ExtensionLoader則通過接口類名和key值獲取一個實現(xiàn);

    (2)Adaptive實現(xiàn),就是生成一個代理類,這樣就可以根據(jù)實際調(diào)用時的一些參數(shù)動態(tài)決定要調(diào)用的類了。

    (3)自動包裝實現(xiàn),這種實現(xiàn)的類一般是自動激活的,常用于包裝類,比如Protocol的兩個實現(xiàn)類:ProtocolFilterWrapper、ProtocolListenerWrapper。
    3、url總線設(shè)計
    Dubbo為了使得各層解耦,采用了url總線的設(shè)計。我們通常的設(shè)計會把層與層之間的交互參數(shù)做成Model,這樣層與層之間溝通成本比較大,擴(kuò)展起來也比較麻煩。因此,Dubbo把各層之間的通信都采用url的形式。比如,注冊中心啟動時,參數(shù)的url為:
    registry://0.0.0.0:9090?codec=registry&transporter=netty
    這就表示當(dāng)前是注冊中心,綁定到所有ip,端口是9090,解析器類型是registry,使用的底層網(wǎng)絡(luò)通信框架是netty。

     二、Dubbo啟動過程

    Dubbo分為注冊中心、服務(wù)提供者(provider)、服務(wù)消費(fèi)者(consumer)三個部分。
    1、注冊中心啟動過程
    注冊中心的啟動過程,主要看兩個類:RegistrySynchronizer、RegistryReceiver,兩個類的初始化方法都是start。
    RegistrySynchronizer的start方法:

    (1)把所有配置信息load到內(nèi)存;

    (2)把當(dāng)前注冊中心信息保存到數(shù)據(jù)庫;

    (3)啟動5個定時器。
    5個定時器的功能是:
    (1)AutoRedirectTask,自動重定向定時器。默認(rèn)1小時運(yùn)行1次。如果當(dāng)前注冊中心的連接數(shù)高于平均值的1.2倍,則將多出來的連接數(shù)重定向到其他注冊中心上,以達(dá)到注冊中心集群的連接數(shù)均衡。
    (2)DirtyCheckTask,臟數(shù)據(jù)檢查定時器。作用是:分別檢查緩存provider、數(shù)據(jù)庫provider、緩存consumer、數(shù)據(jù)庫consumer的數(shù)據(jù),清除臟數(shù)據(jù);清理不存活的provider和consumer數(shù)據(jù);對于緩存中的存在的provider或consumer而數(shù)據(jù)庫不存在,重新注冊和訂閱。
    (3)ChangedClearTask,changes變更表的定時清理任務(wù)。作用是讀取changes表,清除過期數(shù)據(jù)。
    (4)AlivedCheckTask,注冊中心存活狀態(tài)定時檢查,會定時更新registries表的expire字段,用以判斷注冊中心的存活狀態(tài)。如果有新的注冊中心,發(fā)送同步消息,將當(dāng)前所有注冊中心的地址通知到所有客戶端。
    (5)ChangedCheckTask,變更檢查定時器。檢查changes表的變更,檢查類型包括:參數(shù)覆蓋變更、路由變更、服務(wù)消費(fèi)者變更、權(quán)重變更、負(fù)載均衡變更。
    RegistryReceiver的start方法:啟動注冊中心服務(wù)。默認(rèn)使用netty框架,綁定本機(jī)的9090端口。最后啟動服務(wù)的過程是在NettyServer來完成的。接收消息時,拋開dubbo協(xié)議的解碼器,調(diào)用類的順序是

    NettyHandler-》NettyServer-》MultiMessageHandler-》HeartbeatHandler-》AllDispatcher-》 DecodeHandler-》HeaderExchangeHandler-》RegistryReceiver-》RegistryValidator-》RegistryFailover-》RegistryExecutor

    2、provider啟動過程
    provider的啟動過程是從ServiceConfig的export方法開始進(jìn)行的,具體步驟是:
    (1)進(jìn)行本地jvm的暴露,不開放任何端口,以提供injvm這種形式的調(diào)用,這種調(diào)用只是本地調(diào)用,不涉及進(jìn)程間通信。
    (2)調(diào)用RegistryProtocol的export。
    (3)調(diào)用DubboProtocol的export,默認(rèn)開啟20880端口,用以提供接收consumer的遠(yuǎn)程調(diào)用服務(wù)。
    (4)通過新建RemoteRegistry來建立與注冊中心的連接。
    (5)將服務(wù)地址注冊到注冊中心。
    (6)去注冊中心訂閱自己的服務(wù)。
    3、consumer啟動過程
    consumer的啟動過程是通過ReferenceConfig的get方法進(jìn)行的,具體步驟是:
    (1)通過新建RemoteRegistry來建立與注冊中心的連接。
    (2)新建RegistryDirectory并向注冊中心訂閱服務(wù),RegistryDirectory用以維護(hù)注冊中心獲取的服務(wù)相關(guān)信息。
    (3)創(chuàng)建代理類,發(fā)起consumer遠(yuǎn)程調(diào)用時,實際調(diào)用的是InvokerInvocationHandler。

    三、實際調(diào)用過程
    consumer端發(fā)起調(diào)用時,實際調(diào)用經(jīng)過的類是:
    1、consumer:

    InvokerInvocationHandler-》MockClusterInvoker(如果配置了Mock,則直接調(diào)用本地Mock類)-》FailoverClusterInvoker(負(fù)載均衡,容錯機(jī)制,默認(rèn)在發(fā)生錯誤的情況下,進(jìn)行兩次重試)-》RegistryDirectory$InvokerDelegete-》ConsumerContextFilter-》FutureFilter-&gt;DubboInvoker

    2、provider:

    NettyServer-》MultiMessageHandler-》HeartbeatHandler-》AllDispatcher-》DecodeHandler-》HeaderExchangeHandler-》DubboProtocol.requestHandler-》EchoFilter-》ClassLoaderFilter-》GenericFilter-》ContextFilter-》ExceptionFilter-》TimeoutFilter-》MonitorFilter-》TraceFilter-》實際service

    四、Dubbo使用的設(shè)計模式
    1、工廠模式
    ServiceConfig中有個字段,代碼是這樣的:

    private static final Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();

    Dubbo里有很多這種代碼。這也是一種工廠模式,只是實現(xiàn)類的獲取采用了jdk spi的機(jī)制。這么實現(xiàn)的優(yōu)點(diǎn)是可擴(kuò)展性強(qiáng),想要擴(kuò)展實現(xiàn),只需要在classpath下增加個文件就可以了,代碼零侵入。另外,像上面的Adaptive實現(xiàn),可以做到調(diào)用時動態(tài)決定調(diào)用哪個實現(xiàn),但是由于這種實現(xiàn)采用了動態(tài)代理,會造成代碼調(diào)試比較麻煩,需要分析出實際調(diào)用的實現(xiàn)類。
    2、裝飾器模式
    Dubbo在啟動和調(diào)用階段都大量使用了裝飾器模式。以Provider提供的調(diào)用鏈為例,具體的調(diào)用鏈代碼是在ProtocolFilterWrapper的buildInvokerChain完成的,具體是將注解中含有g(shù)roup=provider的Filter實現(xiàn),按照order排序,最后的調(diào)用順序是

    EchoFilter-》ClassLoaderFilter-》GenericFilter-》ContextFilter-》ExceptionFilter-》 TimeoutFilter-》MonitorFilter-》TraceFilter

    更確切地說,這里是裝飾器和責(zé)任鏈模式的混合使用。例如,EchoFilter的作用是判斷是否是回聲測試請求,是的話直接返回內(nèi)容,這是一種責(zé)任鏈的體現(xiàn)。而像ClassLoaderFilter則只是在主功能上添加了功能,更改當(dāng)前線程的ClassLoader,這是典型的裝飾器模式。
    3、觀察者模式
    Dubbo的provider啟動時,需要與注冊中心交互,先注冊自己的服務(wù),再訂閱自己的服務(wù),訂閱時,采用了觀察者模式,開啟一個listener。注冊中心會每5秒定時檢查是否有服務(wù)更新,如果有更新,向該服務(wù)的提供者發(fā)送一個notify消息,provider接受到notify消息后,即運(yùn)行NotifyListener的notify方法,執(zhí)行監(jiān)聽器方法。
    4、動態(tài)代理模式
    Dubbo擴(kuò)展jdk spi的類ExtensionLoader的Adaptive實現(xiàn)是典型的動態(tài)代理實現(xiàn)。Dubbo需要靈活地控制實現(xiàn)類,即在調(diào)用階段動態(tài)地根據(jù)參數(shù)決定調(diào)用哪個實現(xiàn)類,所以采用先生成代理類的方法,能夠做到靈活的調(diào)用。生成代理類的代碼是ExtensionLoader的createAdaptiveExtensionClassCode方法。代理類的主要邏輯是,獲取URL參數(shù)中指定參數(shù)的值作為獲取實現(xiàn)類的key。

     

    posted @ 2015-12-15 19:25 小馬歌 閱讀(231) | 評論 (0)編輯 收藏
     
    摘要:Google于2004年公布了MapReduce論文,為數(shù)據(jù)領(lǐng)域工作者開啟了大數(shù)據(jù)算法之門。然而Google的大數(shù)據(jù)腳步顯然不止于此,其后公布了Percolator、Pregel、Dremel、Spanner等多篇論文。沒有止步的不僅是Google,很多公司也跟隨其腳步開發(fā)了很多優(yōu)秀的產(chǎn)品,雖然其中不乏模仿。

    Mikio L. Braun柏林工業(yè)大學(xué)機(jī)器學(xué)習(xí)學(xué)博士后,TWIMPACT聯(lián)合創(chuàng)始人兼首席數(shù)據(jù)科學(xué)家。在其個人博客上總結(jié)了Google近幾年大數(shù)據(jù)領(lǐng)域的論文,并發(fā)表了自己的見解。

    以下為譯文:

    主流的大數(shù)據(jù)基本都是MapReduce的衍生,然而把目光聚焦到實時上就會發(fā)現(xiàn):MapReuce的局限性已經(jīng)漸漸浮現(xiàn)。下面將討論一下自大數(shù)據(jù)開始,Google公布的大數(shù)據(jù)相關(guān)技術(shù),以及這些技術(shù)的現(xiàn)狀。

    MapReuce、Google File System以及Bigtable:大數(shù)據(jù)算法的起源

    按時間算第一篇的論文應(yīng)該2003年公布的 Google File System,這是一個分布式文件系統(tǒng)。從根本上說:文件被分割成很多塊,使用冗余的方式儲存于商用機(jī)器集群上;這里不得不說基本上Google每篇論文都是關(guān)于“商用機(jī)型”。

    緊隨其后的就是2004年被公布的 MapReduce,而今MapReuce基本上已經(jīng)代表了大數(shù)據(jù)。傳說中,Google使用它計算他們的搜索索引。而Mikio L. Braun認(rèn)為其工作模式應(yīng)該是:Google把所有抓取的頁面都放置于他們的集群上,并且每天都使用MapReduce來重算。

    Bigtable發(fā)布于2006年,啟發(fā)了無數(shù)的NoSQL數(shù)據(jù)庫,比如:Cassandra、HBase等等。Cassandra架構(gòu)中有一半是模仿Bigtable,包括了數(shù)據(jù)模型、SSTables以及提前寫日志(另一半是模仿Amazon的Dynamo數(shù)據(jù)庫,使用點(diǎn)對點(diǎn)集群模式)。

    Percolator:處理個體修改

    Google并沒有止步于MapReduce。事實上,隨著Internet的指數(shù)增長,從零開始重算所有搜索索引變得不切實際。取而代之,Google開發(fā)了一個更有價值的系統(tǒng),同樣支持分布式計算。

    這也是其有趣的地方,特別是在對比常見的主流大數(shù)據(jù)之后。舉個例子,Percolator引入了事務(wù),而一些NoSQL數(shù)據(jù)庫仍然在強(qiáng)調(diào)得到高擴(kuò)展性的同時你必須犧牲(或者不再需要)事務(wù)處理。

    在2010年這篇 Percolator的論文中,Google展示了其網(wǎng)絡(luò)搜索是如何保持著與時俱進(jìn)。Percolator建立于已存類似Bigtable的技術(shù),但是加入了事務(wù)以及行和表上的鎖和表變化的通知。這些通知之后會被用于觸發(fā)不同階段的計算。通過這樣的方式,個體的更新就可以“滲透”整個數(shù)據(jù)庫。

    這種方法會讓人聯(lián)想到類似Storm(或者是Yahoo的S4)的流處理框架(SPF),然而Percolator內(nèi)在是以數(shù)據(jù)作為基礎(chǔ)。SPF使用的一般是消息傳遞而不是數(shù)據(jù)共享,這樣的話更容易推測出究竟是發(fā)生了什么。然而問題也隨之產(chǎn)生:除非你手動的在某個終端上儲存,否則你將無法訪問計算的結(jié)果。

    Pregel:可擴(kuò)展的圖計算

    最終Google還需要挖掘圖數(shù)據(jù),比如在線社交網(wǎng)絡(luò)的社交圖譜;所以他們開發(fā)了 Pregel,并在2010年公布其論文。

    Pregel內(nèi)在的計算模型比MapReduce復(fù)雜的多:基本上每個節(jié)點(diǎn)都擁有一個工作者線程,并且對眾多工作者線程進(jìn)行迭代并行。在每一個所謂的“superstep”中,每一個工作者線程都可以從節(jié)點(diǎn)的“收件夾”中讀取消息和把消息發(fā)送給其它節(jié)點(diǎn),設(shè)置和讀取節(jié)點(diǎn)相關(guān)值以及邊界,或者投票停止。線程會一直運(yùn)行,直到所有的節(jié)點(diǎn)都被投票停止。此外,還擁有Aggregator和Combiner做全局統(tǒng)計。

    論文陳述了許多算法的實現(xiàn),比如Google的PageRank、最短路徑、二分圖匹配等。Mikio L. Braun認(rèn)為,對比MapReduce或SPF,Pregel需要更多實現(xiàn)的再思考。

    Dremel:在線可視化

    在2010年,Google還公布了 Dremel論文。一個為結(jié)構(gòu)化數(shù)據(jù)設(shè)計,并擁有類SQL語言的交互式數(shù)據(jù)庫。然而取代SQL數(shù)據(jù)庫使用字段填補(bǔ)的表格,Dremel中使用的是類JSON格式數(shù)據(jù)(更準(zhǔn)確的說,使用Google Protocol buffer格式,這將加強(qiáng)對允許字段的限制)。內(nèi)部,數(shù)據(jù)被使用特殊格式儲存,可以讓數(shù)據(jù)掃描工作來的更高效。查詢被送往服務(wù)器,而優(yōu)秀的格式可以最大性能的輸出結(jié)果。

    Spanner:全球分布

    最后 Spanner—— 全球分布式數(shù)據(jù)庫;Google在2009年提出了Spanner遠(yuǎn)景計劃,并在2012年對外公布Spanner論文。Spanner的公布可以說是Google向大數(shù)據(jù)技術(shù)中添的又一把火,Spanner具有高擴(kuò)展性、多版本、全球級分布以及同步復(fù)制等特性。

    跨數(shù)據(jù)中心的高擴(kuò)展性及全球分布會對一致性保障提出苛刻的需求 —— 讀寫的外部一致性和基于時間戳的全局讀一致性。為了保障這一點(diǎn),Google引入了TrueTime API。TureTime API可以同步全球的時間,擁有一個TT.now()的方法,將獲得一個絕對時間,同時還能得到時間誤差。為了保證萬無一失,TrueTime API具有GPS和原子鐘雙保險。也只有這樣的機(jī)制才能讓全球范圍內(nèi)的并發(fā)處理得到保障。

    大數(shù)據(jù)超越MapReduce

    Google并沒有止步于MapReduce,他們在MapReduce不適用的地方開發(fā)新方法;當(dāng)然,對于大數(shù)據(jù)領(lǐng)域來說這是個福音。MapReduce不是萬能的;當(dāng)然,你可以更深入一步,比如說將磁盤數(shù)據(jù)移入內(nèi)存,然而同樣還存在一些任務(wù)的內(nèi)部結(jié)構(gòu)并不是MapReduce可以擴(kuò)展的。

    在Google思路以及論文的啟發(fā)下,同樣涌現(xiàn)出一些開源項目,比如:Apache Drill、Apache Giraph、斯坦福GPS等等。

    Google近年來每篇論文都有著深遠(yuǎn)的影響,同時大數(shù)據(jù)領(lǐng)域內(nèi)有很多人必然在翹首以盼Google的下一篇論文。

    原文鏈接: Big Data beyond MapReduce: Google's Big Data papers (編譯/仲浩 審校/王旭東)

    歡迎 @CSDN云計算 微博參與討論,了解更多云信息。

    posted @ 2015-12-11 11:18 小馬歌 閱讀(328) | 評論 (0)編輯 收藏
     
    摘要:7月22日,阿里云正式對外發(fā)布了企業(yè)級互聯(lián)網(wǎng)架構(gòu)解決方案,該服務(wù)由EDAS應(yīng)用框架、ONS消息隊列、DRDS分布式數(shù)據(jù)庫組成,能有效解決企業(yè)上云后網(wǎng)站過載、性能瓶頸、重復(fù)開發(fā)等問題。

    7月22日,阿里云正式對外發(fā)布了企業(yè)級互聯(lián)網(wǎng)架構(gòu)解決方案,該服務(wù)由EDAS應(yīng)用框架、ONS消息隊列、DRDS分布式數(shù)據(jù)庫組成,能有效解決企業(yè)上云后網(wǎng)站過載、性能瓶頸、重復(fù)開發(fā)等問題。

    云棲大會武漢站,阿里云中間件團(tuán)隊首次解密這一企業(yè)級互聯(lián)網(wǎng)架構(gòu)解決方案。

    EDAS,企業(yè)級分布式應(yīng)用服務(wù)

    EDAS(企業(yè)級分布式應(yīng)用服務(wù),Enterprise Distributed Application Service)是一個以阿里巴巴中間件團(tuán)隊的多款久經(jīng)沙場的分布式產(chǎn)品作為核心基礎(chǔ)組件構(gòu)建的企業(yè)級云計算解決方案,其充分利用阿里云的ECS等資源,引入淘寶中間件整套成熟的分布式計算框架(包括分布式服務(wù)化、鏈路追蹤和穩(wěn)定性組件等),以應(yīng)用為中心,幫助企業(yè)級客戶在阿里云上輕松構(gòu)建像淘寶這樣的大型分布式應(yīng)用服務(wù)。

    具備單應(yīng)用5K運(yùn)維能力的一站式PaaS平臺

    應(yīng)用全生命周期管理

    EDAS能夠非常方便的幫助企業(yè)級客戶實現(xiàn)一站式的應(yīng)用生命周期管理,其以“應(yīng)用”為中心,從應(yīng)用的創(chuàng)建開始,到應(yīng)用的部署與擴(kuò)容,真正意義上實現(xiàn)對大規(guī)模互聯(lián)網(wǎng)應(yīng)用在發(fā)布和運(yùn)行過程中的全面管理。

    單應(yīng)用5K運(yùn)維能力

    依托于阿里巴巴多年對超大規(guī)模互聯(lián)網(wǎng)電商系統(tǒng)的運(yùn)維,所沉淀下來寶貴經(jīng)驗和大量運(yùn)維工具都融入于EDAS產(chǎn)品之中,使得其具備對單個應(yīng)用多達(dá)5000臺服務(wù)器規(guī)模的快速發(fā)布能力,包括個性化的Beta和分批發(fā)布機(jī)制。

    去“中心化”的高性能服務(wù)框架

    EDAS所提供的分布式服務(wù)框架,源自于阿里巴巴內(nèi)部使用規(guī)模最大的中間件產(chǎn)品——HSF。自2007年誕生以來,HSF服務(wù)框架就成為了阿里巴巴內(nèi)部服務(wù)化改造的基礎(chǔ)組件,其超高的性能、久經(jīng)考驗的穩(wěn)定性、以及良好的用戶體驗,支撐了生產(chǎn)環(huán)境所有系統(tǒng)的服務(wù)化調(diào)用,日均調(diào)用量為2000~3000億次,分鐘峰值最高達(dá)到25億次。

    和傳統(tǒng)基于企業(yè)服務(wù)總線的架構(gòu)所截然不同的是,HSF服務(wù)框架采用了去“中心化”的系統(tǒng)架構(gòu),服務(wù)的提供者和調(diào)用者都直接相連,這樣的系統(tǒng)架構(gòu)不僅去除了中心單點(diǎn)的風(fēng)險,還能大大提高調(diào)用效率。

    鷹眼:分布式全鏈路跟蹤系統(tǒng)

    EDAS所提供的鷹眼跟蹤系統(tǒng),通過收集和分析在網(wǎng)絡(luò)調(diào)用上的日志埋點(diǎn),可以得到同一次請求上的各個系統(tǒng)的調(diào)用鏈關(guān)系,有助于梳理應(yīng)用的請求入口與服務(wù)的調(diào)用來源、依賴關(guān)系,同時,也對分析系統(tǒng)調(diào)用瓶頸、估算鏈路容量、快速定位異常有很大幫助。

    全面的基礎(chǔ)和應(yīng)用監(jiān)控

    EDAS不僅提供了CPU、內(nèi)存和Load等維度的基礎(chǔ)監(jiān)控指標(biāo),還提供了針對HTTP入口、提供HSF服務(wù)的調(diào)用QPS和消費(fèi)HSF服務(wù)的調(diào)用QPS等應(yīng)用層面的監(jiān)控指標(biāo),幫助客戶更為精準(zhǔn)全面的對自己的系統(tǒng)進(jìn)行監(jiān)控。

    彈性伸縮

    EDAS提供了手動和自動兩種模式的彈性伸縮。通過全面的基礎(chǔ)和應(yīng)用監(jiān)控,客戶能夠輕松的實現(xiàn)應(yīng)用的擴(kuò)容和縮容。

    限流降級/容量規(guī)劃:打造健全的服務(wù)化體系

    千萬不要以為使用一套RPC框架就算是完成服務(wù)化的工作了——這僅僅是服務(wù)化的冰山一角,尤其是針對企業(yè)級的大規(guī)模互聯(lián)網(wǎng)應(yīng)用,使用RPC框架進(jìn)行系統(tǒng)的服務(wù)化改造后,所帶來的服務(wù)治理的挑戰(zhàn),才是企業(yè)級系統(tǒng)服務(wù)化的開始。EDAS提供了一系列的服務(wù)治理工具,能夠幫助企業(yè)級客戶打造健全的服務(wù)化體系。

    限流降級

    服務(wù)的限流能夠幫助客戶在面對大促的時候,從容的做到核心業(yè)務(wù)與非核心業(yè)務(wù)的區(qū)別對待,最大化的在服務(wù)的可用性和用戶的體驗性上達(dá)到平衡。

    服務(wù)的降級則能夠幫助客戶很好的規(guī)避由于依賴的服務(wù)不可用而引發(fā)的問題。當(dāng)依賴的服務(wù)出現(xiàn)不可用情況,可以自定義的配置規(guī)則來確定對應(yīng)的降級方案。

    這些限流降級工具都已經(jīng)經(jīng)受了多次雙十一大促的考驗。

    容量規(guī)劃

    EDAS提供了特有的容量規(guī)劃功能,通過自動壓測,可以測算出當(dāng)前系統(tǒng)的容量。同時,通過容量模型(當(dāng)前系統(tǒng)容量、希望支撐的容量和當(dāng)前應(yīng)用機(jī)器數(shù)等)的建立,能夠持續(xù)的對系統(tǒng)進(jìn)行容量規(guī)劃,這將方便客戶對未來流量增長情況下,提前科學(xué)準(zhǔn)確的預(yù)估出應(yīng)用所需要的機(jī)器數(shù)。

    EDAS核心功能展示

    posted @ 2015-12-10 19:46 小馬歌 閱讀(277) | 評論 (0)編輯 收藏
     
         摘要: 作者:Benjamin H. Sigelman, Luiz Andr´e Barroso, Mike Burrows, Pat Stephenson, Manoj Plakal, Donald Beaver, Saul Jaspan, Chandan ShanbhagView project onGitHub概述當(dāng)代的互聯(lián)網(wǎng)的服務(wù),通常都是用復(fù)雜的、大規(guī)模分布式集群來實現(xiàn)的。互聯(lián)網(wǎng)應(yīng)用構(gòu)...  閱讀全文
    posted @ 2015-12-10 19:45 小馬歌 閱讀(238) | 評論 (0)編輯 收藏
     

    本文介紹了Mac下如何找到AppStore下載的安裝包路徑,以及如何提取出來供以后使用的相關(guān)步驟,希望對大家有所幫助。


            通過遠(yuǎn)在大洋彼岸的蘋果服務(wù)器下載東西,確實有夠慢啊!AppStore更甚:甚至都經(jīng)常提示連不上服務(wù)器,而有些軟件呢,還必須從AppStore下載安裝,所以沒辦法,誰讓上了蘋果的賊船呢!公司的網(wǎng)速更是不敢恭維,以至于基本上不下東西,除非像這次一樣:手賤的把iPhone6升級到8.2.2了,然后Xcode6.1.1真機(jī)調(diào)試不成了,所以需要下個Xcode6.2。昨天剛更新的Xcode6.2,沒有看國內(nèi)有同胞下載下來沒,一般我都是會從官網(wǎng)下載一個保存到百度網(wǎng)盤以供自己和別人使用的。但是迅雷、瀏覽器下載的都很慢,于是我就通過AppStore更新,貌似還有點(diǎn)兒小快呢(不知道是不是心理作用)!

            但是又有一個問題:AppStore安裝完后會刪除安裝包,而且也不知道路徑在哪兒,這我怎么能容忍!!!因為公司還有好多電腦要裝呢!!!于是乎,就參考網(wǎng)絡(luò)上的各種資源,找到了下載的路徑~~~



    廢話不多說了,上步驟(前提:正在安裝一個程序,例如我正在安裝Xcode):

    1.如圖所示:從應(yīng)用中打開活動監(jiān)視器:

    技術(shù)分享


            打開后如圖所示:

    技術(shù)分享


    2.找到進(jìn)程storedownloadd(以前的是storeagent進(jìn)程,到10.10之后是storedownloadd這個進(jìn)程):

    技術(shù)分享


    3.點(diǎn)擊左上角第二個:查看所選進(jìn)程的信息:

    技術(shù)分享




    4.選擇第三個標(biāo)簽:打開的文件和端口

    技術(shù)分享


    5.command + F,找到以.pkg結(jié)尾的路徑并且拷貝,如下圖所示:


    技術(shù)分享

    6.在Finder中前往文件夾:

    技術(shù)分享


    7.粘貼復(fù)制的路徑,并且回車

    技術(shù)分享


    8.如下圖一樣的pkg包就是下載的安裝包

    技術(shù)分享



            注意,這一點(diǎn)非常重要第一:不要把這個包早拷出來:因為還沒有下載完成;第二:不要等安裝完再拷:安裝完系統(tǒng)會把這個包刪除的。一定要抓住機(jī)會,在系統(tǒng)安裝程序的時候以迅雷不及掩耳盜鈴兒響叮當(dāng)之勢,把它拉出來~~~


    例如下載的Xcode:

            正在下載:

    技術(shù)分享

            快完了,一定要看住:

            技術(shù)分享

            我這個是下載完了的,因為我打開了Xcode,所以桌面彈出了一個警告框讓我關(guān)閉,我直接拖出來了,所以還沒有出現(xiàn)正在安裝。如果沒有打開正在安裝的程序,這里會顯示:正在安裝,就是這個時候抓住這一瞬間,把pkg拖出來,完工~~~


            現(xiàn)在好了,整個世界平靜了,下載的軟件被我們揪住了,然后雙擊安裝即可。安裝完后還可以拷到其他的電腦上進(jìn)行安裝,省的再次下載了~~~

    技術(shù)分享


            通過這種方式得到的安裝包和從蘋果官網(wǎng)下載的安裝包不一樣:蘋果官網(wǎng)下載的時后綴為.dmg的鏡像,里面包含.pkg的安裝包,而這個直接就是pkg的包,雙擊安裝即可~~~


            希望對大家有所幫助!!!




    本文出自 “一毛” 博客,請務(wù)必保留此出處http://winann.blog.51cto.com/4424329/1619352

    posted @ 2015-10-21 12:29 小馬歌 閱讀(275) | 評論 (0)編輯 收藏
     
    org.springframework.web.util.NestedServletExceptio n: Request processing failed; nested exception is java.lang.IllegalArgumentException: Model has no value for 


    @RequestMapping("/test7/{id}")
        public ModelAndView test7(ModelAndView view, @PathVariable("id") int id) {
            RedirectView redirectView = new RedirectView("/index{id}");
            redirectView.setExpandUriTemplateVariables(false);
            redirectView.setExposeModelAttributes(false);
            view.setView(redirectView);
            view.addObject("test", "test");
            return view;
        }
    posted @ 2015-10-19 21:54 小馬歌 閱讀(596) | 評論 (0)編輯 收藏
     

    from:http://blog.csdn.net/yh_bxhl/article/details/7684318

    頭銜: 技術(shù)總監(jiān)(Chief Technology Officer)

    技術(shù)總監(jiān)最重要的工作職責(zé)是領(lǐng)導(dǎo)公司技術(shù)團(tuán)隊,執(zhí)行、開發(fā)和部署公司的互聯(lián)網(wǎng)項目,進(jìn)而保證公司的商業(yè)目標(biāo)得以實現(xiàn)。要做到這一點(diǎn),技術(shù)總監(jiān)必須能夠參與制定公司的商業(yè)戰(zhàn)略,帶領(lǐng)團(tuán)隊實施互聯(lián)網(wǎng)項目的開發(fā),預(yù)知各種潛在風(fēng)險及業(yè)務(wù)發(fā)展瓶頸,并為此做好相應(yīng)計劃準(zhǔn)備。

    職責(zé)描述之一:戰(zhàn)略和計劃

    • 與公司創(chuàng)始人緊密協(xié)作,對公司的互聯(lián)網(wǎng)項目進(jìn)行合理評估。評估內(nèi)容包括:市場機(jī)會、風(fēng)險、競爭優(yōu)勢、市場風(fēng)險、影響商業(yè)成功的技術(shù)瓶頸等。
    • 了解技術(shù)發(fā)展趨勢,發(fā)展自己的社會和職業(yè)關(guān)系,幫組和促進(jìn)商業(yè)目標(biāo)的成功。
    • 發(fā)現(xiàn)和評估各種技術(shù)、平臺、框架。
    • 為技術(shù)團(tuán)隊的開發(fā)工作制定宏觀戰(zhàn)略目標(biāo),包括:目標(biāo)制定,優(yōu)先排序,路線圖制定等。
    • 作為公司高層管理者之一,參與監(jiān)管公司產(chǎn)品發(fā)展走向,確保實現(xiàn)公司戰(zhàn)略目標(biāo),降低商業(yè)風(fēng)險,優(yōu)化并合理利用公司資源。技術(shù)總監(jiān)尤其需要在如下方面承擔(dān)責(zé)任:軟件開發(fā)、辦公室軟硬件管理、網(wǎng)絡(luò)、和公司通訊設(shè)備。
    • 協(xié)調(diào)公司各部門,評估和推薦相關(guān)技術(shù),滿足公司整體IT需求;
    • 建立完整的信息保護(hù)機(jī)制,保證公司、合作伙伴、和用戶的信息安全。
    • 建立完整的信息安全機(jī)制,保護(hù)公司數(shù)據(jù)的機(jī)密、完整、以及數(shù)據(jù)服務(wù)的正常運(yùn)行。
    • 建立完整的災(zāi)難恢復(fù)預(yù)案,保證公司產(chǎn)品或服務(wù)在遭遇任何攻擊或不可預(yù)知的災(zāi)難的情況下,能夠快速恢復(fù)正常服務(wù)。
    • 必要情況下,將公司的技術(shù)戰(zhàn)略向投資人、管理者、員工、合作伙伴、顧客、和持股人進(jìn)行解釋說明。

    職責(zé)描述之二:項目開發(fā)和部署

    • 參與公司互聯(lián)網(wǎng)項目的域名選擇,包括任何相關(guān)但不會被使用的域名,以避免未來可能的競爭和惡意釣魚行為。管理公司注冊的域名,定期續(xù)費(fèi),保證所有域名不會丟失。
    • 協(xié)調(diào)系統(tǒng)管理員,建立公司的企業(yè)電子郵件服務(wù)。
    • 協(xié)調(diào)系統(tǒng)管理員,建立軟件開發(fā)的版本控制系統(tǒng)。
    • 選型并協(xié)調(diào)系統(tǒng)管理員,建立開發(fā)團(tuán)隊的內(nèi)部溝通系統(tǒng),例如,wiki、博客、即時通訊工具、項目管理工具、bug提交系統(tǒng)等。
    • 協(xié)調(diào)公司管理高層和潛在客戶,繪制系統(tǒng)用例,為產(chǎn)品的開發(fā)形成相應(yīng)的需求和規(guī)范。
    • 協(xié)調(diào)用戶體驗設(shè)計師和產(chǎn)品客戶,為產(chǎn)品繪制原型圖。
    • 協(xié)調(diào)網(wǎng)站設(shè)計師,根據(jù)產(chǎn)品原型和已建立的明確需求,為產(chǎn)品進(jìn)行視覺設(shè)計。
    • 協(xié)調(diào)網(wǎng)站前端設(shè)計師,遵循相關(guān)制作標(biāo)準(zhǔn),將設(shè)計轉(zhuǎn)化成前端代碼 (HTML/CSS/JavaScript)。
    • 選擇和確定產(chǎn)品開發(fā)模式。
    • 根據(jù)需求書和用戶體驗設(shè)計建立測試計劃。
    • 制定代碼規(guī)范和文檔規(guī)范。
    • 評估和選型開發(fā)框架,部署基礎(chǔ)系統(tǒng)。
    • 招聘、組建、和管理產(chǎn)品開發(fā)團(tuán)隊(或選擇管理外包開發(fā)團(tuán)隊)。
    • 監(jiān)控產(chǎn)品開發(fā)流程,開發(fā)目標(biāo)拆解、制定長、中、短期開發(fā)目標(biāo)。
    • 建立質(zhì)量控制體系,保證代碼的高質(zhì)高效。
    • 監(jiān)控產(chǎn)品執(zhí)行性能,選擇和部署相關(guān)工具對開發(fā)中系統(tǒng)進(jìn)行性能測試。
    • 管理和控制產(chǎn)品版本更新。
    • 評估和選擇與產(chǎn)品有關(guān)的IDC服務(wù)商。
    • 建立產(chǎn)品發(fā)布過程,負(fù)責(zé)測試版本和正式版本的切換發(fā)布過程。
    • 建立產(chǎn)品流量監(jiān)控體系。
    • 支持互聯(lián)網(wǎng)營銷和管理搜索引擎優(yōu)化。
    • 建立用戶反饋和支持體系,保證用戶反饋可以傳達(dá)到公司管理層和產(chǎn)品團(tuán)隊。建立用戶幫助服務(wù)體系,保證用戶使用產(chǎn)品過程所遇到的問題能夠得到迅速解決。保證產(chǎn)品可用性持續(xù)提高。

    職責(zé)描述之三:運(yùn)營管理

    • 保持知識更新,關(guān)注行業(yè)趨勢,了解最新技術(shù),不斷探索軟件發(fā)展的最佳實踐。
    • 參與定義、形成、宣傳公司價值和文化。
    • 確保技術(shù)標(biāo)準(zhǔn)和最佳管理實踐在整個組織的貫徹和執(zhí)行。
    • 建立技術(shù)團(tuán)隊培訓(xùn)機(jī)制,確保知識在整個開發(fā)團(tuán)隊的持續(xù)增加和分享。利用各種機(jī)會將公司的技術(shù)理念、機(jī)會、和挑戰(zhàn)傳播給公司的投資人、管理高層、員工、合作伙伴、終端用戶。
    • 確保公司的技術(shù)瓶頸在最短時間內(nèi),以最低投入方式得以解決。
    • 參與制定年度預(yù)算,并確保技術(shù)團(tuán)隊發(fā)展和項目開發(fā)在年度預(yù)算內(nèi)完成。
    • 參與技術(shù)團(tuán)隊人才招聘,保證公司的雇傭流程和薪金制定與行業(yè)和人才市場的通用標(biāo)準(zhǔn)一致。
    • 建立技術(shù)團(tuán)隊各種角色的工作考察標(biāo)準(zhǔn),根據(jù)這些標(biāo)準(zhǔn)對每個員工進(jìn)行考察。
    • 建立外包團(tuán)隊工作審核標(biāo)準(zhǔn),制定服務(wù)等級合同,并通過合同對外包團(tuán)隊進(jìn)行有效管理。
    posted @ 2015-10-12 08:51 小馬歌 閱讀(669) | 評論 (1)編輯 收藏
    僅列出標(biāo)題
    共95頁: First 上一頁 8 9 10 11 12 13 14 15 16 下一頁 Last 
     
    主站蜘蛛池模板: 永久在线免费观看| 亚洲欧洲高清有无| 国产精品亚洲不卡一区二区三区 | 中国china体内裑精亚洲日本| 久久亚洲美女精品国产精品| 亚洲男人第一av网站| 亚洲国产综合精品中文第一区| 亚洲第一精品福利| 亚洲精品高清国产麻豆专区| 亚洲视频在线不卡| 亚洲av一本岛在线播放| 国产成人亚洲综合一区| 亚洲爆乳AAA无码专区| 精品亚洲成a人在线观看| 窝窝影视午夜看片免费| 中文字幕不卡高清免费| 日本免费一区二区久久人人澡| 香港a毛片免费观看| 皇色在线视频免费网站| 日本免费中文字幕在线看| 亚洲AV无码乱码在线观看| 亚洲熟妇无码八AV在线播放| 亚洲一区二区中文| 亚洲精品综合在线影院| 老湿机一区午夜精品免费福利| 一级毛片**免费看试看20分钟| 国产日韩一区二区三免费高清| 97av免费视频| 在线播放高清国语自产拍免费 | 欧洲一级毛片免费| 成人影片麻豆国产影片免费观看| 日韩免费观看的一级毛片| 亚洲 无码 在线 专区| 黑人精品videos亚洲人| 亚洲午夜在线一区| 福利片免费一区二区三区| a级毛片在线免费观看| 国产麻豆视频免费观看| mm1313亚洲精品国产| 国产亚洲综合一区柠檬导航| 亚洲人成毛片线播放|