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

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

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

    京山游俠

    專注技術(shù),拒絕扯淡
    posts - 50, comments - 868, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

      SpringSide是個好東西,對我來說,它的好主要體現(xiàn)在兩個方面:一、它提供了一個敏捷開發(fā)的框架,省去了我自己整合Spring、Hibernate、Struts、ActiveMQ等等開源組件的時間,而且還是最佳實踐;二、它指導(dǎo)了我的學(xué)習(xí)目標,在SpringSide中整合的各種組件,都是在同一類組件中最優(yōu)秀的,而且要想熟練使用這些組件,都必須對它們進行深入的系統(tǒng)的學(xué)習(xí)。

      本來以為我會在SpringSide開發(fā)實戰(zhàn)系列中寫更多的文章,但是寫到現(xiàn)在,我認為應(yīng)該要寫結(jié)局了,為什么呢?因為在使用SpringSide進行項目開發(fā)的過程中,我越來越感覺到項目絕對不是各種組件的簡單堆砌,而是程序員要不斷有自己的想法和創(chuàng)意,并能夠抽象到一個高度。這也正是為什么我的文章從第一篇到第八篇越來越偏離SpringSide的核心了。在這里,我主要想談?wù)劤绦騿T的境界。以下觀點純屬個人看法,歡迎大家探討。

      第一層境界:從不能到能。

      可以這么說,早在7年前我就已經(jīng)熟練掌握C語言、Visual FoxPro數(shù)據(jù)庫、HTML、CSS和JavaScript,C語言和Visual FoxPro是學(xué)校教的,HTML、CSS和JavaScript是自學(xué)的,同時,我還自學(xué)了Flash動畫制作和Photoshop圖像處理。但是,我那時候還不知道應(yīng)用程序開發(fā),學(xué)的這些東西無非就是好玩,偶爾參加一次學(xué)校主辦的網(wǎng)頁設(shè)計大賽而已。

      我開發(fā)的第一個應(yīng)用是《銀符英語在線》,使用的是ASP + SQL Server 2000,時間是2004年,那時我剛考過軟件設(shè)計師(原高級程序員),有人找我做程序,他說想做一個英語四六級的在線考試系統(tǒng),問我能不能做到,我毫不猶豫就說能。我想我確實是具有軟件設(shè)計方面的天賦,用了一個星期設(shè)計出數(shù)據(jù)庫,再用一個星期寫了一個Demo,一下子就把他征服了,于是,他當老板,我當程序員,一起進行在線英語考試方面的開發(fā)。

      在這段時間,我覺得我不折不扣就是處于這第一層境界。JScript我早已是滾瓜亂熟,ASP教程更隨處可得。在這段時間里,我用全JScript代碼實現(xiàn)了用戶認證和權(quán)限管理,用Visual C++寫了個COM組件進行數(shù)據(jù)的加密和解密,還在網(wǎng)上到處搜索文件上傳和動態(tài)圖片生成方面的解決辦法。當時,我覺得我的開發(fā)過程充實而滿足;現(xiàn)在看來,我只不過是一個重復(fù)發(fā)明輪子的傻冒。

      在10個月的時間里,我把這個程序從1.0版開發(fā)到3.0版,功能上進行了不少升級。但是我認為升級最大的還是我的技術(shù),我盡我最到的能力將代碼與網(wǎng)頁分離,盡我最到的能力減少代碼的重復(fù),甚至已經(jīng)基本做到使用模式來讓程序更加容易擴充和維護。我所做的一切,與現(xiàn)代的一些Web開發(fā)框架已經(jīng)不謀而合。但是,以我當時的內(nèi)力,確實沒有辦法將之抽象為一個框架。我的程序中依然充滿了意大利面條式的代碼,而且在在線人數(shù)多的時候,網(wǎng)頁會慢得象蝸牛爬。

      第二層境界:從能做到做得漂亮

      2005年,我開始接觸Java,以我的基礎(chǔ),自然是很快就學(xué)會了Java的語法并進軍J2EE。我覺得Java開源世界給了我不少能量,在這兩年里,我的進步速度是呈指數(shù)式的。以我現(xiàn)在的水平,僅使用JSP和Servlet,已經(jīng)足以解決絕大部分的需求。然而,僅使用JSP和Servlet就是全部嗎?

      這個時候,我們不僅僅要能夠完成應(yīng)用程序的編寫,更重要的要讓應(yīng)用程序便于維護和便于擴充。這時候,沒有足夠的抽象能力是不夠的。要能夠理解和應(yīng)用分層架構(gòu),要知道MVC、IoC、AOP、ORM,要了解聲明式事務(wù)處理,還要學(xué)會最流行了AJAX。所有的這一切,不僅能夠讓我們的應(yīng)用便于維護,合理使用各開源組件還能加快開發(fā)的速度,但是最重要的,它們能使我們的應(yīng)用充滿藝術(shù)的美感。

      在SpringSide社區(qū),現(xiàn)在最流行的是Acegi,這也是對安全與權(quán)限功能的一種抽象。本來我也想寫一篇Acegi方面的文章,但是cac寫的文檔是在是太完美、太經(jīng)典了,我無法超越。我們應(yīng)該讓我們的應(yīng)用盡量向Acegi靠攏,因為,它代表的就是安全與權(quán)限領(lǐng)域的最佳實踐。

      第三層境界:從程序員到架構(gòu)師

      架構(gòu)師可以干什么?如何讓應(yīng)用在性能,伸縮性,擴展性、可靠性,容災(zāi),可恢復(fù)性,可管理性等方面做到最好,就是架構(gòu)師的職責,同時,架構(gòu)師要能夠把握軟件開發(fā)的整個周期。由于我還只是一個程序員,也沒有精力去學(xué)習(xí)架構(gòu)師方面的只是,因此上面的論述可能不準確。但是,作為一個程序員,上升到一個境界之后,確實應(yīng)該考慮編碼之外的東西了。

      舉例說明,cnblogs的博客程序算式比較完善的了,我個人對站長dudu也是充滿了仰慕。cnblogs的1.0Beta2版本我也下載得有,本打算使用它建一個自己的博客網(wǎng)站,但是卻不行,因為它在性能,伸縮性,擴展性方面都達不到我的要求。

      不信?看看現(xiàn)在www.cnblogs.com吧,注冊用戶已經(jīng)2萬多了,速度也是越來越慢,經(jīng)過我一nslookup,發(fā)現(xiàn)它還只是一臺主機在運行,而www.tianya.cn則是一個服務(wù)器集群。如下圖:
    52.JPG

      造成這個問題的原因,主要就是架構(gòu)的問題。cnblogs是基于.net的,.net運行于IIS之上,而IIS又是那么的簡單,更本不具備配置Cluster的功能。而cnblogs的程序在設(shè)計的時候也沒有往集群方面考慮,甚至是想多配置幾個數(shù)據(jù)庫都是困難的。

      解決網(wǎng)站性能的辦法有幾種,一是向上擴展,也就是不斷增加服務(wù)器的CPU和內(nèi)存,但是這種擴展價格非常昂貴;二是向外擴展,也就是多增加幾臺廉價的Web服務(wù)器和數(shù)據(jù)庫服務(wù)器,但是由于cnblogs在設(shè)計的時候沒有考慮到集群功能,就必須得重構(gòu)所有的代碼,這個工作量實在是太大了;三是垂直分割,也就是目前博客園所采用的方法,就是讓一臺主機負責.net博客,一臺主機負責java博客等等,把不同的應(yīng)用分開。這樣帶來的負面影響是我們就沒有辦法在同一個博客上面同時寫.net、java、c++方面的隨筆了,這確實讓我感覺不爽,此外,在.net領(lǐng)域這樣訪問量大的領(lǐng)域,一樣會使服務(wù)器不堪重負。

      我不能讓我的程序重蹈覆轍,因此,在架構(gòu)階段就應(yīng)該考慮到Cluster,考慮到負載均衡,考慮到可擴充性,并同時使用水平分割策略。水平分割策略和垂直分割策略不同,是讓每一個Web服務(wù)器都應(yīng)該能夠使用程序的所有功能,而讓不同的用戶使用不同的服務(wù)器,比如id為0-10000的用戶和www1.cnblogs.com交互,10001-20000的用戶和www2.cnblogs.com交互,等等,如下圖所示:
    53.JPG

      這個時候,服務(wù)器www.cnblogs.com作為負載均衡服務(wù)器,它根據(jù)登錄用戶的ID將該用戶請求重定向到www1.cnblogs.com或者www2.cnblogs.com,對于匿名用戶,它把用戶請求隨機重定向到www1.cnblogs.com或者www2.cnblogs.com。

      同時,為了能夠讓負載均衡服務(wù)器能夠根據(jù)不同的用戶來重定向到不同的Web服務(wù)器,又要讓每個Web服務(wù)器上的應(yīng)用都能夠得到所有各個數(shù)據(jù)庫服務(wù)器數(shù)據(jù)的總的索引,需要有一個索引數(shù)據(jù)庫服務(wù)器,如下圖:
    54.JPG

      此外,我們還應(yīng)該讓W(xué)eb服務(wù)器和數(shù)據(jù)庫服務(wù)器可以動態(tài)增加,也就是當某一個服務(wù)器負載到達極限時,我們可以添加一臺服務(wù)器,只需要修改配置文件即可,無需更改代碼,如下圖:
    55.JPG

      同時配合使用動態(tài)頁面靜態(tài)化技術(shù),靜態(tài)化后的html頁面和圖片文件都保存在Web服務(wù)器上,此時Web服務(wù)器有同時擔當了緩存服務(wù)器的功能。當達到IO瓶頸的限制后,又可以通過服務(wù)器加大內(nèi)存或為服務(wù)器配置SAN(存儲區(qū)域網(wǎng)絡(luò))來解決問題。


      好了,SpringSide系列的文章就寫這么多吧。期待SpringSide 2.0正式版的發(fā)布。我會把它用到實際的項目開發(fā)中。


    評論

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-29 01:19 by yeshucheng
    文章寫得確實不錯:)

    哪天我也有你的心態(tài)境遇就好,繼續(xù)努力!

    京山游俠,希望以后你多寫點在實際項目中遇到類似這些性能問題的解決方法:)

    不過我覺得你的這篇文章和SS好象很離題吧?難道是我語文沒學(xué)好

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-29 03:17 by 山風(fēng)小子
    您的這篇文章要比其他技術(shù)性文章要優(yōu)秀很多,也讓我學(xué)到了不少東西。
    對各類框架的整合,應(yīng)用,我已經(jīng)膩了,感覺自己像一個‘裝配工’。
    因此現(xiàn)在要么學(xué)習(xí)封裝的最好的框架--Grails,設(shè)計模式等High level的東西,要么就鉆研數(shù)據(jù)結(jié)構(gòu),算法,編譯原理等最基礎(chǔ)的東西。
    您覺得我走這兩個極端如何,希望得到您的忠告,謝謝 :)

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-29 07:33 by ncindy
    IIS不能集群,Apache可以?而且Web服務(wù)器沒有集群的必要吧,
    而且天涯那更像是用DNS做LB的方式,不是集群。LB的話IIS當然可以了。
    可伸縮性在應(yīng)用層上用SNA才是最關(guān)鍵的,用這種架構(gòu)別說IIS,就是用Ruby腳本寫的web server都可以實現(xiàn)高可伸縮性。

    dudu只有一臺服務(wù)器是估計因為現(xiàn)在資金還不夠充裕,想想天涯做了多少 年了啊。

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-29 09:10 by wangzx
    作者關(guān)于集群的描述我比較感興趣,不過我覺得從應(yīng)用的角度上不妨越簡單越好。比如說作者可以考慮使用Apache作為反向代理的方式,將負載均衡到多臺WEB服務(wù)器上,再結(jié)合動態(tài)、靜態(tài)的Cache技術(shù),我覺得這個問題會變得簡單很多。利用Apache等提供的緩存技術(shù),我感覺會比你自己來實現(xiàn)“動態(tài)轉(zhuǎn)靜態(tài)”更有意義。

    過多的在應(yīng)用層次考慮一些低層次的功能,最大的缺點是把應(yīng)用本身搞得很復(fù)雜,難以維護,而如果放在其下的層次來考慮,我覺得可以很好的實現(xiàn)這二者的平衡:既簡單又高效。當然,從應(yīng)用的設(shè)計上來說,不是說不需要考慮底層技術(shù),只是,現(xiàn)在我們只要知道我們的應(yīng)用設(shè)計是可以跟這些底層(如反向代理、Cache)等相匹配、相合作的,就可以了。

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-29 09:18 by L
    負載均衡直接用F5做就行了,根本沒必要這么復(fù)雜。

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-29 09:24 by Max
    如果作者有看過《Expert One on one J2EE Development Without EJB》應(yīng)該知道,J2EE的Cluster的性能不一定是最好的。
    Microsoft同樣有Load Balance的軟件。

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-29 09:59 by 蕭木
    這篇文章應(yīng)該有不少誤導(dǎo)讀者的地方.

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-29 10:04 by BeanSoft
    也許作者說的是理想情況下, 不需要考慮吃飯, 出于研究/自學(xué)狀態(tài)下的心態(tài).

    絕大多數(shù)程序員吧, 都是為了吃飯而工作. 很多時候用戶需要的是一個 IF-ELSE 的邏輯符合他的需要, 這個時候再多的框架也只是個殼, 而且這些框架也絲毫不能減少編寫 if-else 的代碼. 我不覺得框架整合的越多越牛, 而是應(yīng)該進行分工, 不同的人專著于自己最擅長的領(lǐng)域, 大家分工合作. 換句話說只要能如期完成項目或者需求, 到底是什么技術(shù)用戶是不在意的.
    軟件業(yè)是服務(wù)業(yè), 而國內(nèi)的項目大多都是應(yīng)用程序, 業(yè)務(wù)流程, 這時候這些XX開源框架很多時候都幫不了太多的忙.
    至于架構(gòu)的方面, 只能說做新項目之前多做些設(shè)計, 擴展等方面的工作, 能否集群也只是一部分, 采用哪些框架要根據(jù)實際情況討論, 還得考慮萬一碰到框架 Bug 的時候怎么辦(記住開源項目可不是帶免費技術(shù)支持的). 實際的情況往往是在維護老項目, 架構(gòu)已不可再改, 推倒重做風(fēng)險更大, 老板也不會同意.
    個人覺得吧, 好好工作, 扎實掌握基礎(chǔ)知識, 對于項目所需知識則是按需學(xué)習(xí), 早日根據(jù)自己的愛好, 實際情況進行定位和規(guī)劃. 畢竟精力有限, 人人都成為精通XXX流行框架又是架構(gòu)師的概率實在是太低. 基礎(chǔ)掌握牢固的話, 再看框架很多時候都會感到似曾相識.
    PS: 我也不覺得 SpringSide 就是敏捷開發(fā), 最佳實踐, 說最佳之前請三思. PetStore 不也是經(jīng)典嘛, 現(xiàn)在還不是被批判的體無完膚.

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-29 11:08 by 江南白衣
    恭喜恭喜,告一段落,可以向更高的目標進發(fā)。

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-29 11:31 by adsljkfjlksda
    @蕭木
    那你寫篇來看看,說這句話之前,想想你自己能寫出什么東西,如果你有,請在你這句話下面把 鏈接 貼出來,讓大家也評評,如果確實好,那么沒人會說什么,如果沒有一絲對大家有幫助的話,那你這句話是不負責任的~~ ,

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-29 13:27 by yegucheng
    作者只寫了集群的一部分,我覺得架構(gòu)設(shè)計應(yīng)該包含更廣泛的內(nèi)容,我覺得架構(gòu)師應(yīng)該從更高的高度去理解項目需求,不是為技術(shù)而技術(shù),當然,這一切都必須以扎實的基本功為基礎(chǔ)

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-29 17:26 by 小陸
    clust可以在操作系統(tǒng)的層次上實現(xiàn),iis完全可以集群化。
    你所說的集群是load balance,可以做在網(wǎng)關(guān)或者dns上

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界[未登錄]  回復(fù)  更多評論   

    2007-03-29 18:48 by cac
    其實每個程序員不一定都有架構(gòu)師的職位,但都需要有架構(gòu)師的思想,可以說沒有架構(gòu)師思想的程序員不是好的程序員。
    從程序員到架構(gòu)師只是一個從量變到質(zhì)便的過程,沒有在編程階段磨練過,嘗試過各種語言,各種工具,各種方法的架構(gòu)師也不會是一個好的架構(gòu)師
    LZ 樸實的學(xué)習(xí)精神讓人敬佩

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-29 20:43 by 海邊沫沫
    @yeshucheng
    就是因為越來越離題,所以決定結(jié)束這個系列

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-29 20:46 by 海邊沫沫
    @山風(fēng)小子
    我也喜歡數(shù)據(jù)結(jié)構(gòu)、算法、編譯原理
    我也討厭當裝配工

    看來我們兩個有很多共同之處

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-29 20:52 by 海邊沫沫
    剛到msdn去看了下關(guān)于體系結(jié)構(gòu)方面的東西,看了下MSA EDC構(gòu)建指南。感覺我的確是井底之蛙。

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-30 09:01 by 山風(fēng)小子
    @海邊沫沫 @江南白衣
    以后請多多指教 :)

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-31 10:57 by 海邊沫沫
    @wangzx
    我覺得應(yīng)用層還是應(yīng)該考慮一些底層的東西。myspace.com現(xiàn)在有1.2億注冊用戶,每個月訪問量達到400億,三年時間中已經(jīng)對網(wǎng)站進行了5次重寫,最后就是在應(yīng)用層采用的水平分割策略。

    Apache的緩存我也應(yīng)該去學(xué)習(xí)學(xué)習(xí),謝謝你的指點。

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-03-31 17:46 by 海邊沫沫
    @Max

    《Expert One on one J2EE Development Without EJB》中并沒有說J2EE的Cluster性能不好。

    在“性能和可伸縮性”這一節(jié),作者對怎樣設(shè)計具有高性能和高可伸縮性的程序進行了探討,其大致意思基本如下:

    應(yīng)用于服務(wù)器集群的程序,其實現(xiàn)方式基本上可以分為兩種,一種是基于分布式對象的,一種是基于部署的。什么是基于分布式對象呢?就是傳統(tǒng)的EJB部署方式,不同的業(yè)務(wù)對象分布于集群中不同的服務(wù)器上,通過遠程調(diào)用來分擔服務(wù)器負載;這種方式是被作者所不推薦的,理由是遠程調(diào)用太浪費時間,這也正是作者寫Without Ejb的本意。什么是基于部署的呢?就是在集群中的每一臺服務(wù)器上都部署有該程序的完整版本,所有的業(yè)務(wù)對象都在本機上可以訪問。

    此外,作者還探討了狀態(tài)管理,性能最高的就是作者所說的農(nóng)場模式,也就是說每一臺服務(wù)器都可以當作別的服務(wù)器不存在,他們之間不需要進行Session狀態(tài)復(fù)制等等。如果要進行Session狀態(tài)的復(fù)制,必然會對集群的性能造成影響,n臺服務(wù)器的性能不可能達到1臺服務(wù)器的n倍。

    對于《Expert One on one J2EE Development Without EJB》這樣的好書,確實應(yīng)該反復(fù)閱讀。

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-07-25 15:08 by 我的Java工作經(jīng)歷
    無語了,牛。。。。

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2007-08-09 13:22 by mmwy
    nslookup出來只有一個ip并不一定能說明它就沒做負載均衡處理。難說你得到的這個ip是前置的負載均衡交換機的ip,realserver都躲在其內(nèi)部來著。

    nslookup出來多個ip,也許他只是用了最簡單的dns輪循的負載均衡處理,也有可能是做了gslb。

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2008-08-13 08:23 by 笑笑笑笑笑笑笑
    文章舊了,希望可以更新到springside3.0

    # re: SpringSide開發(fā)實戰(zhàn)(八):不是結(jié)局的結(jié)局,談?wù)劤绦騿T的境界  回復(fù)  更多評論   

    2009-03-25 23:58 by hansen
    寫的不錯,有同感
    記得老師曾說過 “程序員像作家,寫代碼就像在寫作”,
    好的架構(gòu)師就如同金庸等名家,寫出的代碼像是藝術(shù)品 如spring hibernate的作者。 而普通的程序員(這里指為了生計,在極短時間內(nèi)copy,修改代碼,來完成工作任務(wù)) 可能只是為了完成每天的工作而已,只是為那點錢。就像某些記者。 雖然我也很想寫出優(yōu)雅的代碼,但領(lǐng)導(dǎo)不會理解你的做法,只是覺得你效率低。
    未來 我一定會“寫”屬于我自己風(fēng)格的真正好作品。
    主站蜘蛛池模板: 免费不卡在线观看AV| 阿v免费在线观看| 久久久99精品免费观看| 亚洲中文字幕在线第六区| 无码精品人妻一区二区三区免费| 日本高清免费不卡在线| 亚洲熟妇无码av另类vr影视| 成人免费视频小说| 亚洲成a人无码亚洲成www牛牛| 在线看片无码永久免费aⅴ| 亚洲av成人一区二区三区观看在线 | 国产精品亚洲lv粉色| 四虎影视精品永久免费| 又粗又长又爽又长黄免费视频| 国产亚洲人成网站在线观看| 美女视频黄a视频全免费网站色窝| 久久精品亚洲一区二区| 亚洲免费电影网站| 国产精品亚洲专区在线观看 | 日本高清免费中文字幕不卡| 一本久久免费视频| 亚洲Av熟妇高潮30p| 亚洲免费黄色网址| 亚洲av成人一区二区三区在线播放| 亚洲国产成人久久综合一区77| 国产一区二区三区免费观在线| 亚洲av片劲爆在线观看| 69成人免费视频| 日本高清不卡中文字幕免费| 亚洲VA中文字幕无码毛片| 91香蕉成人免费网站| 高潮内射免费看片| 亚洲国产精品热久久| 毛片免费视频观看| v片免费在线观看| 亚洲综合成人网在线观看| 国产视频精品免费| 午夜视频免费在线观看| 看亚洲a级一级毛片| 亚洲第一视频网站| 免费在线观看亚洲|