全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:37755
推到 Plurk!
推到 Facebook!
[<<] [1] [2] [3] [>>]

無責任技評 : DataSnap

 
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#32 引用回覆 回覆 發表時間:2015-02-28 09:46:09 IP:221.120.xxx.xxx 未訂閱
因為我對於「REST」一詞的理解還不夠,才會針對蕭大提出的「JSON-RPC」一詞發出疑問。

從「
維基百科 - REST」的定義上來看:
  • 資源是由URI來指定。
  • 對資源的操作包括獲取、創建、修改和刪除資源,這些操作正好對應HTTP協議提供的GET、POST、PUT和DELETE方法。
  • 通過操作資源的表現形式來操作資源。
  • 資源的表現形式則是XML或者HTML,取決於讀者是機器還是人,是消費web服務的客戶軟體還是web瀏覽器。當然也可以是任何其他的格式。
就蕭大提供的網路封包來看,它符合上述的要點:

但回過頭來想,如果這樣的理解是對的,那麼幾乎大多數的Web Service也都算是REST。

接著又產生了另一個問題,REST和RESTful指的是同一個東西嗎?

我的看法是
REST定義設計風格
RESTful完成實作

以上

還請蕭大俠多多指導!
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#33 引用回覆 回覆 發表時間:2015-02-28 10:01:04 IP:220.129.xxx.xxx 訂閱
含狀態傳輸(英文:Representational State Transfer,簡稱REST)

的最大著重點在: 「客戶端發送出來的通訊要含狀態」。特別注意,是「客戶端」。同時,也因為客戶端含了狀態,「才能使得伺服器不需要管理狀態」。簡言之,限制,可以得到一些好處。特別是在 internet 上的應用,講的都是「大量」的互動。

僅管REST極多數是指web server上的實作,且多數以JSON格式回傳結果,但其實不限任何形式的回傳,比如xml也ok,csv也可,因為回傳格式不是REST的重點。

有一件有趣,且關於REST概念相關的東西 : 冪等 (Idempotence)。它原來是數學上的用語,以下貼中文wiki的說法:

「冪等元素是指被自己重複運算(或對於函數是為複合)的結果等於它自己的元素。例如,乘
法下唯一兩個冪等實數為0和1。」

在電腦科學領域下,可以同概念性的指出,若某個方法 T foo(x,y,z) 被叫用n次,結果都是一樣的,也可以說是 「冪等方法」。比如 Add(1,3) = 4 的結果,無論怎麼調用幾次都一樣。這也是一種 REST 的概念,因為參數 1 與 3 (用戶狀態)固定後,回傳值總會一樣。而什麼樣的方法不是 冪等 的呢? 我也可以舉一個例子,c語言中 strtok 這個函式就不是。我懶的寫strtok的例子,借一下隨機googling的例子,(謝謝該作者)

http://pydoing.blogspot.tw/2010/07/c-strtok.html

這個strtok的實作就是「有在維護一index的狀態」,所以,每次叫它,得到不同的答案! 所以,用REST的概念性來看,它就是不符合REST,NOT RESTFul API。進一步再說,它不能夠容易的擴展。怎麼說不容易? 因為這個函式 strtok 基本上是 類旁通!

快完了…待續…
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#34 引用回覆 回覆 發表時間:2015-02-28 10:58:55 IP:220.129.xxx.xxx 訂閱
但事實上,session id 是「伺服器發的」這個很重要。它不是「客戶端」自己提出的id,這有別於「客戶端帶著狀態傳送」。我覺得這裡容易搞亂。但你可以假想,如果 server 甲 他發一個id 1234 給 客戶小明。下一次 小明用帶著1234的id去找server,但可惜的是這回連入的是 server乙… 會怎樣? 換句話說,這樣的架構不能夠 (原生自己限制自己,使其成為讓客戶無狀態,進而伺服器可以不管狀態。 但假如你自己修改或加入自己的實作,使得別人叫用你的 foo,add ,get_records等方法符合REST限制規範,那麼你的 foo add 等都是 RESTFul API,而你的整體實作也合REST架構。 但你不會稱 DataSnap02 本身是 REST 架構的!

以上是我個人目前為止的見解。


===================引 用
文 章===================
」的定義上來看:
資源的表現形式則是XML或者HTML,取決於讀者是機器還是人,是消費web服務的客戶軟體還是web瀏覽器。當然也可以是任何其他的格式。PUT /datasnap/tunnel?dss=27854.786997.434231&c=386 HTTP/1.1
URL指定,操作採PUT方式,Resource是datasnap,取得的表現形式是JSON Package。

所以我才認為就算是「DataSnap Server」專案,它也是基於REST風格的呈現。

但回過頭來想,如果這樣的理解是對的,那麼幾乎大多數的Web Service也都算是REST。

接著又產生了另一個問題,REST和RESTful指的是同一個東西嗎?

我的看法是
REST定義設計風格
RESTful完成實作

以上

還請蕭大俠多多指導!
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2015-02-28 11:37:17, 註解 無‧
aftcast 重新編輯於 2015-02-28 11:45:41, 註解 無‧
aftcast 重新編輯於 2015-03-02 12:58:59, 註解 無‧
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#35 引用回覆 回覆 發表時間:2015-03-04 17:58:50 IP:59.120.xxx.xxx 未訂閱
 終於認真看完了。

原來DataSnap Server JSON-PRC還真包了Binrary來瘦身,太瞎。(正規REST DataSnap就是String內容,在這邊不是指它)

Marshal B指的應該是JSON with Binrary吧?

REST含狀態傳輸部份:
Server端無狀態,再以程式識別Client端帶有狀態的傳輸行為(對應Put, Get, Post, Delete)進行處理,大概是這樣。
法官,我沒意見了。(笑)

補充:Proxy裡講到DataSnap09的範例,是對應「TSQLConnection.Grenerate DataSnap Client Classes」行為。



最後:
Proxy到Stud之間的內容,還有LifeCycle的解釋,學習了。

謝謝蕭大的整理!
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#36 引用回覆 回覆 發表時間:2015-03-18 00:36:16 IP:118.160.xxx.xxx 未訂閱
不好意思, 

三位高手在華山之顛論述武學之際, 我應該是插不上邊, 因為我對 DataSanp的認知十分有限, 就猶如天龍八步中的虛竹(一開始出場的), 只懂得少林的基本拳法, 而我站在Far Far away 的地方, 好整以暇的觀賞這場精采的論述, 突然慢慢的感覺一股強大的劍氣直逼過來, 我看到最後已經不是我能看得懂的,
我覺得啦! 我因為開發app才開始接觸DataSanp, 其實也獲得很多前輩給予指導, 讓我知道DataSanp更進一步的技術, 所以我很能體會對於DataSanp 想學但又不得其門而人的初學者的痛苦指數, 以上的內容, 其實如果在三年前我是完全看不懂, 而現在也是看的很明白, 但聽的很模糊的感覺,
對於初學的, 如果能有一個完整的設計原型可以分享, 那我們更容易去了解 DataSanp的使用, 畢竟我們不是最終駕馭車子的車主, 我們是要開發車子出來給車主使用的, 所以在 Server 端, 在中間端, 在前端分別各應該如何下手設計, 怎麼設計, 怎麼寫, 能有一整套的Project 可以觀摩, 可以讓後生晚輩更容易進入情境, 我們要達到 傳承 的目標就不遠了, 所以很期待看到各位有機會, 也願意傳承, 來開個課吧!
tuga
高階會員


發表:16
回覆:109
積分:120
註冊:2002-07-13

發送簡訊給我
#37 引用回覆 回覆 發表時間:2015-03-19 08:18:57 IP:1.34.xxx.xxx 訂閱
某年某月的某一天 (蔡琴 !@#$$%%%) 印象中

微軟把連線數改成使用者計費, 想靠降低連線數來省錢, 應該是不能了

世界首富怎麼可能讓你暫他的便宜 ??


===================引 用 sryang 文 章===================
我也來說一下連線數的問題

要賣錢的資料庫,比如 MSSQL,通常連線數是要算錢的,預算有限的狀況之下,連線數是有限的

而一般二層式的應用程式一旦連上資料庫,就不放手了

為什麼不放手?方便嘛!懶嘛!

使得有限的連線數被佔用,無法有效的利用

而三層式應用程式的資料庫連線是中間層使用,只要是「無狀態」的中間層,資料庫連線可以比二層式有更有效的運用

小弟淺見供大家參考
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#38 引用回覆 回覆 發表時間:2015-03-19 08:56:35 IP:59.120.xxx.xxx 未訂閱
Finally, a Web connection can use object pooling. This feature enables the server to create a pool of multiple server instances for client requests. This way, the DataSnapServer doesn't use the resource for the remote data module and database connection unless it's actually needed.
Object pooling gives you the ability to set a maximum for the number of instances of the remote data module inside the DataSnap server application. Whenever a client request is received, the DataSnap server checks to see if a free remote data module exists in the pool. If not, it creates a remote data module instance (but raises an exception with the message Server too busy. The remote data module, in its turn, services the client requests and duly waits for the next one. After a certain period of time without client requests, the remote data module is freed automatically (by the object pooling mechanism).

這裡的Object Pooling指的就是並線量,如果有設定,Client數就會被限縮在Object Pooling數量內,也就不會有超用的問題

以上
===================引 用 tuga 文 章===================
某年某月的某一天 (蔡琴 !@#$$%%%) 印象中

微軟把連線數改成使用者計費, 想靠降低連線數來省錢, 應該是不能了

世界首富怎麼可能讓你暫他的便宜 ??


===================引 用 sryang 文 章===================
我也來說一下連線數的問題

要賣錢的資料庫,比如 MSSQL,通常連線數是要算錢的,預算有限的狀況之下,連線數是有限的

而一般二層式的應用程式一旦連上資料庫,就不放手了

為什麼不放手?方便嘛!懶嘛!

使得有限的連線數被佔用,無法有效的利用

而三層式應用程式的資料庫連線是中間層使用,只要是「無狀態」的中間層,資料庫連線可以比二層式有更有效的運用

小弟淺見供大家參考
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#39 引用回覆 回覆 發表時間:2015-03-20 02:42:43 IP:111.243.xxx.xxx 訂閱
它只管你終端用戶是多少人,外加沒人操控(自動程式)的設備連入mssql也都數,並計費。

若有人想要了解更細,可以參考以下簡要:

www.microsoft.com/licensing/about-licensing/briefs/multiplexing.aspx

下面還附圖,一看就明白:

download.microsoft.com/download/8/7/3/8733d036-92b0-4cb8-8912-3b6ab966b8b2/multiplexing.pdf

所以,我簡單的說,目前的datasnap也無法在「此刻」的收費模式下省到 ms sql的錢,(註,其他的db我不清楚,也許可以省)。若你進一步問,那 iis web server 連 sql server呢? 不就要一堆的 ACL ? 是 ! 但現實上的做法是採 core 授權,比如server的cpu是2 core,就付它2個core的錢,那麼 m$ 完全不管你要連幾人,要開幾條connections。

;)


===================引 用 文 章===================
某年某月的某一天 (蔡琴 !@#$$%%%) 印象中

微軟把連線數改成使用者計費, 想靠降低連線數來省錢, 應該是不能了

世界首富怎麼可能讓你暫他的便宜 ??


------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#40 引用回覆 回覆 發表時間:2015-03-20 05:47:54 IP:111.161.xxx.xxx 訂閱
哈哈!
我的經驗都是 10 幾年前的事情了,微軟改變了連線計費方法正是所謂「下有對策,上有政策」是也!

===================引 用 aftcast 文 章===================
它只管你終端用戶是多少人,外加沒人操控(自動程式)的設備連入mssql也都數,並計費。

若有人想要了解更細,可以參考以下簡要:

www.microsoft.com/licensing/about-licensing/briefs/multiplexing.aspx

下面還附圖,一看就明白:

download.microsoft.com/download/8/7/3/8733d036-92b0-4cb8-8912-3b6ab966b8b2/multiplexing.pdf

所以,我簡單的說,目前的datasnap也無法在「此刻」的收費模式下省到 ms sql的錢,(註,其他的db我不清楚,也許可以省)。若你進一步問,那 iis web server 連 sql server呢? 不就要一堆的 ACL ? 是 ! 但現實上的做法是採 core 授權,比如server的cpu是2 core,就付它2個core的錢,那麼 m$ 完全不管你要連幾人,要開幾條connections。

;)


===================引 用 文 章===================
某年某月的某一天 (蔡琴 !@#$$%%%) 印象中

微軟把連線數改成使用者計費,‚ 想靠降低連線數來省錢, 應該是不能了

世界首富怎麼可能讓你暫他的便宜 ??


------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#41 引用回覆 回覆 發表時間:2015-03-21 06:15:56 IP:111.243.xxx.xxx 訂閱
ListenQueue

這個值預設是15。意義是它同時間可以承受連入的請求數。這所謂的連入是指connection在handshaking時,不是指已經連入後可承受的值。已經連入但維持著的連線數預設可以"無限"。說是無限,事實上當然依你pc的資源所能承受的範圍。indy是一條connection配一條thread,吃資源很兇,所以也很難大量。回到剛說的ListenQueue這個屬性,它影響的是新連線要建立時的限制。一些網路DDOS攻擊與這個值就有關。若惡意程式故意大量請求要連線,不出15個,你的server就無法服務別人了… 所以,大致上需要修改這個值。

以下是與indy相關的設定源碼: (重點轉貼)

const
IdListenQueueDefault = 15; //同時間,新的連線請求只能是15個

property ListenQueue: integer read FListenQueue write FListenQueue default IdListenQueueDefault;
property MaxConnections: Integer read FMaxConnections write FMaxConnections default 0; // "無限"的意思

未完…待續…
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#42 引用回覆 回覆 發表時間:2015-03-21 06:57:23 IP:111.243.xxx.xxx 訂閱
TWebRequestHandler
Application.WebModuleClass := WebModuleClass;
TISAPIApplication(Application).OnTerminate := TerminateThreads;
Application.Run;
end.

而TWebRequestHandler的建構式源碼如下:

constructor TWebRequestHandler.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FCriticalSection := TCriticalSection.Create;
FActiveWebModules := TList.Create;
FInactiveWebModules := TList.Create;
FWebModuleFactories := TWebModuleFactoryList.Create;
FMaxConnections := 32; // 看到了吧!
FCacheConnections := True;
end;

FMaxConnections這個欄位就是限制的地方。而這個值的義意為何? 我幫你從help檔轉貼給你看:

property MaxConnections: Integer read FMaxConnections write FMaxConnections;

Sets or returns the MaxConnections used by the socket.

Set MaxConnections to adjust the number of HTTP request messages the application can handle simultaneously. Use the ActiveCount and InactiveCount properties to get a sense of the frequency and duration of request messages. Then set MaxConnections so that it is high enough to avoid exceptions when the application runs out of Web modules, but low enough not to degrade performance too severely by running too many simultaneous threads.

未完…待續…
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2015-03-21 23:52:39, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#43 引用回覆 回覆 發表時間:2015-03-23 23:03:55 IP:114.32.xxx.xxx 訂閱
在datasnap09時,可於 TDSServerClass 的屬性 LifeCycle 設定
乙/ Server: 就是datasnap第一起run起來時,foo就被產出了。未來所有的客戶,都重複用它。比如叫echo後,foo還是不會死。別人在叫bar方法,foo依然不死… 直到datasnap程式結束。很肯定的,這也是要儘量無態。

文章一開始說datasnap就只是一種RPC。過去主要只拿來當clientdataset的provider來用。事實上,當provider來用只發揮了它10%的能力。RPC要發揮所有的能力一定要自訂方法,傳回所需的資訊。一但你的中間層開發了許許多多的方法後,你的前端,如,手機,平版,網頁…都可以容易的擴展。這才是使用datasnap最佳的情境!



最後總結的時間到了。列出我個人對datasnap的優缺點看法:

datasnap的缺點:
1. scalability(擴展性)差。尤其是選用indy為底層的架構。依附在iis/apache上的做法會好很多,但仍需自己做調整。
2. datasnap09的通訊採json-rpc為主,json的內容主要是文字而非二進位,封包大。但若client端採用dbx的連接方式,部份json裡的資料會用二進位,封包可以變小不少。若是純REST的方式調用,則json裡的資料會大非常的多。
3. 它的json函式庫的效能太差,應該有很大的空間可以改善。

datasnap的優點:
4. 開發速度極快。若自己刻RPC的實作要花很多時間。適合中小型企業的使用。



------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#44 引用回覆 回覆 發表時間:2015-03-23 23:11:48 IP:114.32.xxx.xxx 訂閱
以下連結我也忘了每個內容是什麼,只是研究時覺得不錯,就留下來。所以沒有標題說明,還請直接連入看看囉! 最近本人又處於很忙的狀態,有個重要的app要生出來,無法再詳說,尚請見諒!    

目前市上的幾種RPC架構比較。(注意REST是其中一種)

wamp.ws/compared/




docwiki.embarcadero.com/RADStudio/XE3/en/Developing_DataSnap_Applications












與 javascript proxy 相關的




c builder 回傳值與 delphi 不同


以上。

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2015-03-23 23:17:41, 註解 無‧
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#45 引用回覆 回覆 發表時間:2015-03-24 08:15:55 IP:59.120.xxx.xxx 未訂閱
給蕭大俠一個讚!
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#46 引用回覆 回覆 發表時間:2015-03-29 15:19:36 IP:114.32.xxx.xxx 訂閱
http://docwiki.embarcadero.com/RADStudio/XE7/en/Server_Class_LifeCycleOnDisconnectLifeCycleLifeCycle property is set to Invocation and the connection was lost during an invocation (before the response was sent to the client), then the server class will, again, not be destroyed until the server is stopped.


ps 連做個"依設定時間自殺"的實作都沒用 = =||| 。都是這種先求有,再求好的作風。但,經驗上,通常一開始不想求好,就很難再求好…會一直這樣下去…心態問題!

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2015-03-29 15:22:09, 註解 無‧
JL9168
中階會員


發表:133
回覆:223
積分:76
註冊:2011-09-29

發送簡訊給我
#47 引用回覆 回覆 發表時間:2015-03-29 21:14:55 IP:220.132.xxx.xxx 未訂閱
小弟淺見:

基本上是覺得一個Connection就要配置一個物件或是Thread的方式很瞎,因為這樣的系統無法提供大量的服務
;這樣的運作方式即使是有狀態也好,無狀態也罷;系統能提供的資源永遠有限。

架構的錯誤,是無法期待OS能給予補足的................

想像一下這樣的伺服器當承受巨量的使用者需求時又會如何......老實說,真的不敢想!!
JL9168
中階會員


發表:133
回覆:223
積分:76
註冊:2011-09-29

發送簡訊給我
#48 引用回覆 回覆 發表時間:2015-03-31 07:41:18 IP:220.132.xxx.xxx 未訂閱
看來還是要自打嘴巴了,在實現---->瞬間大量的Request需求湧入時;還是得用Thread實作
關鍵只是在於,讓這樣的thread物件快速處理完成後,然後消失!!
相對於一個連線就產生一個Class Instance來說,已經算是輕盈許多。
目前也正在實作能支援大量行動裝置的Backend Server......期望值是能承受瞬間 10萬個Request,
並且能正確的回應每個Request要求的資料!!
持續壓力測試中.........................

===================引 用 JL9168 文 章===================
小弟淺見:

基本上是覺得一個Connection就要配置一個物件或是Thread的方式很瞎,因為這樣的系統無法提供大量的服務
;這樣的運作方式即使是有狀態也好,無狀態也罷;系統能提供的資源永遠有限。

架構的錯誤,是無法期待OS能給予補足的................

想像一下這樣的伺服器當承受巨量的使用者需求時又會如何......老實說,真的不敢想!!
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#49 引用回覆 回覆 發表時間:2015-03-31 09:34:55 IP:114.32.xxx.xxx 訂閱
嘿嘿… 如果說用datasnap可以承受瞬間 1 萬個Requests (不用10萬),還請不吝來分享一下如何做到。
下回有機會去高雄也順便看一下你的成果。XD

===================引 用 JL9168 文 章===================
目前也正在實作能支援大量行動裝置的Backend Server......期望值是能承受瞬間 10萬個Request,

並且能正確的回應每個Request要求的資料!!
持續壓力測試中.........................

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
JL9168
中階會員


發表:133
回覆:223
積分:76
註冊:2011-09-29

發送簡訊給我
#50 引用回覆 回覆 發表時間:2015-03-31 10:31:24 IP:220.132.xxx.xxx 未訂閱
to 蕭大俠 :

其實目前最大的測試值已經到達瞬間67000左右的request......目前正邁向80000大關!!

不過過程中發現DataSnap Server大概能撐到1000就很不錯了,更何況是其間有斷線的問題(物件釋放出狀況)

所以呢......目前是以Http模式來處理,其實就是從頭到尾自己動手..........T_T

也不用Indy......

再加上一些"特殊的手法"..........才好不容易做到!!

這樣的好處是Client端發完Request且取得資料之後就是斷線.........減輕Server的負擔.......

只是很多細節上就需要另外想辦法(像是Bussiness外掛模組的部分,參數的傳遞、字元編碼....等等)

下圖為測試結果


編輯記錄
JL9168 重新編輯於 2015-03-31 12:10:49, 註解 無‧
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#51 引用回覆 回覆 發表時間:2015-03-31 17:51:11 IP:59.127.xxx.xxx 訂閱
看到您貼的截圖,感覺有些疑惑

1. ApacheBench 的參數 -n 是要測試幾次,-c 才是模擬同時有幾個連線數,您沒有下 -c 參數
2. 截圖的結果顯示,平均每秒 5.83 個 request,感覺好像沒有什麼壓力
能否釋疑一下?感謝!
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
JL9168
中階會員


發表:133
回覆:223
積分:76
註冊:2011-09-29

發送簡訊給我
#52 引用回覆 回覆 發表時間:2015-04-01 07:45:34 IP:220.132.xxx.xxx 未訂閱
Dear Sir

因為目前的架構不考量針對大量User 去 Keep Connection(架構設計問題),只希望純粹

支撐大量的Request - Response為主,所以即使是下了-c 指令,內部運作上是直接將Connection結束

所以以-c 來測試是測不到結果的!!

至於平均每秒 5.83 個 request ,不是最沒有壓力的測試,如果只是純粹丟一個字串回傳,速度是

超過平均每秒 5.83 個 request (以最沒有壓力狀況下跑完 80000個 Request 時會再公布測試值)

平均每秒 5.83 個 request 這個成績的過程還包括了,傳入指令與參數、讓Server尋找該指令、

依照指令呼叫設定的外掛程式,執行外掛程式之後,把資料回傳給Client (因為這是我預設的標準模式,

目的只是需要一個可以成為標準的數據)。

---> 80000個Request (也相當於連線離線80000次)--->執行內定指令與設定好的標準模組--->得到的標準參考數據

是本次測試的過程

"AAA" 是一個模組的外掛呼叫指令,會去呼叫抹個外掛程式 ; 和 GetDataJSON( ) 是不同的

因為GetDataJSON( ) 可以寫在Server之中,外掛程式是獨立的....而且還需要傳入傳出資料。

所以最沒有壓力的狀況是----> "收到指令之後,直接丟字串回傳,過程中不去呼叫任何外掛程式"!!

以上,不知道有沒有說得很清楚??



===================引 用 sryang 文 章===================



看到您貼的截圖,感覺有些疑惑



1. ApacheBench 的參數 -n 是要測試幾次,-c 才是模擬同時有幾個連線數,您沒有下 -c 參數

2. 截圖的結果顯示,平均每秒 5.83 個 request,感覺好像沒有什麼壓力



能否釋疑一下?感謝!

編輯記錄
JL9168 重新編輯於 2015-04-01 08:07:39, 註解 無‧
JL9168
中階會員


發表:133
回覆:223
積分:76
註冊:2011-09-29

發送簡訊給我
#53 引用回覆 回覆 發表時間:2015-04-01 08:05:30 IP:220.132.xxx.xxx 未訂閱
Dear Sir:
這張圖是最沒有壓力的測試成績......單純找到指令之後,直接回傳資料

sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#54 引用回覆 回覆 發表時間:2015-04-01 09:48:13 IP:59.127.xxx.xxx 訂閱
您要測試的是在處理那麼多次的 request 之後,server 依然是健壯的,沒有發生諸如 memory leak 之類的問題把 server 拖垮
瞭解了。感謝!
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
JL9168
中階會員


發表:133
回覆:223
積分:76
註冊:2011-09-29

發送簡訊給我
#55 引用回覆 回覆 發表時間:2015-04-06 11:38:13 IP:220.132.xxx.xxx 未訂閱
Dear Sir :
可以提供這麼大量的Request服務!!
應用程式伺服器了!!


編輯記錄
JL9168 重新編輯於 2015-04-06 11:51:48, 註解 無‧
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#56 引用回覆 回覆 發表時間:2015-04-07 09:29:36 IP:59.127.xxx.xxx 訂閱
對於一個應用程式服務器,我還有更多的期待。例如:
  1. 提供分散式交易的服務
  2. 提供統一的 log 服務
  3. 提供統一的 configuration 服務
等等
不知您對於以上所提是否有什麼想法或是作法?
感謝!
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
JL9168
中階會員


發表:133
回覆:223
積分:76
註冊:2011-09-29

發送簡訊給我
#57 引用回覆 回覆 發表時間:2015-04-07 14:50:50 IP:220.132.xxx.xxx 未訂閱
Dear sryang :

當前於資料存取的架構上,是將資料交易與商業邏輯合併,作成逐一獨立的套件來實現(類似獨立的DLL / BPL)

每一個 Client 端透過Command 來呼叫上述的任何一項服務,進而取得或是異動資料。

Server 部分則可以透過( 啟動/關閉 ) Monitor 的設定來決定是否監看相關的呼叫與執行的過程(當前已計畫中,尚未完全實作)

Server 具備統一管理並且設定各項指令與套件的關聯、像是"呼叫方式"、"歸屬群組"、"套件參數"、"資料取得方式"、"資料的回覆格式" (目前已經實作了)
這是目前的想法

===================引 用 sryang 文 章===================



對於一個應用程式服務器,我還有更多的期待。例如:





  1. 提供分散式交易的服務


  2. 提供統一的 log 服務


  3. 提供統一的 configuration 服務



等等

不知您對於以上所提是否有什麼想法或是作法?

感謝!

編輯記錄
JL9168 重新編輯於 2015-04-07 15:16:02, 註解 無‧
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#58 引用回覆 回覆 發表時間:2015-04-11 21:00:43 IP:60.250.xxx.xxx 訂閱
整個看完實在有點吃力
建議副站長出本書,很多經驗需要細細品讀,我會預購..... 唉...一本。
說坦白我實作上經驗以距離 Delphi 標準越來越遠,話當年 2000 年初學 Delphi 就是從 Midas 開始並且與X新對槓。
年輕不懂事都在亂寫一通。當年 3-Tier 誇大被吹出來。
那時實際測試 某些情況下 2 >3 Tier 效率,但客端連線數到某一數量,3 > 2 Tier。
那時知道 Midas Instance (不管哪一模) 不會釋放。記憶有點遙遠!
因此後來我決定使用自己的基礎,由Socket 端開始。
現在寫 3-Tier 僅套用觀念,基於 ICS 自改元件 減少 Response 次數。
為了減少伺服器負荷,作法是這樣分兩種
事先全部一次建立允許最大 Thread 與 Instance,然後空在那裡等待 Client Socket 連線,
依序進入 Thread ,如果滿了 客端將顯示排隊視窗(排隊序號)。當然無狀態下,每一Request 都會介入 Thread 。
好處減少 Thread 建立與DB Connect 時間 。以憂化方式推算最適宜的Thread 數量,好吧買多少授權一次做足。
另一種熊熊想不起特色有什麼。大致上自己減少 Thread 重複建立與連線時間。反正自己的標準要怎麼玩都可以。
沒什麼好說的。基礎就著樣,我不會太多的專有名詞,就是土法煉鋼。
aftcast 副站長說的很棒!都是實務經驗。要學習的地方有很多。

Delphi K.Top 神人一堆,有時我覺得我個人常常坐井觀天。
如果大家都不藏著掖著,這樣交流多多益善。

參考。以上 讚美詞以外 知識領域都可視為廢話。
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#59 引用回覆 回覆 發表時間:2015-04-13 13:25:22 IP:114.32.xxx.xxx 訂閱
謝謝 rootkit 的分享與支持。我想你說的應該就是 worker thread pool  and/or db connection pool 的應用。的確那樣是處理大量的方式,唯也如你說的「推算最適宜的Thread 數量」這是個重點。不同的應用與程式的特性會有不同的結果,隨著時間的流轉,特性也會變。基本上若有做連線log的記錄,經過一段時間就可以拿來做tuning的依據。
「聞道有先後,術業有專攻」,每個人都有強的地方與需要補強的地方,要學習的還非常的多,我也是疲於學習呢! 交流更是檢視自己所學一個很好的方式。利人利己。 ;)

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
JL9168
中階會員


發表:133
回覆:223
積分:76
註冊:2011-09-29

發送簡訊給我
#60 引用回覆 回覆 發表時間:2015-04-22 12:18:57 IP:220.132.xxx.xxx 未訂閱
發表一下個人看法:
針對DataSnap實作面來說,覺得ServerContainerUnit1和ServerMethodUnit1看起來他們被建立起來的時機,決定於ServerContainerUnit1上的
DSServerClass1的Lcycle屬性
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#61 引用回覆 回覆 發表時間:2015-04-22 12:25:11 IP:114.32.xxx.xxx 訂閱
哈哈,你被我抓包了。你沒認真的看完我寫的。好啦,不怪你,因為又亂又臭又長的文章難以吃下去。 ^_-
對的。就是它LifeCycle。而且若你用的是 isapi,或是apache 模組,還要額外考量別的。我的文上都有寫唷~~

===================引 用 JL9168 文 章===================
發表一下個人看法:

針對DataSnap實作面來說,覺得ServerContainerUnit1和ServerMethodUnit1看起來他們被建立起來的時機,決定於ServerContainerUnit1上的
DSServerClass1的Lcycle屬性
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
[<<] [1] [2] [3] [>>]
系統時間:2024-04-26 5:26:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!