考慮分佈式行申請,其中分散劑機修改全局變量的值後:說「平衡」重新啓動代理程序崩潰
因此,代理人的請求進行排隊。請求的形式是將值代表特定代理添加到全局變量中。因此,對於該代理的代碼的形式爲:現在
agent
{
look_queue(); // take a look at the leftmost request on queue without dequeuing
lock_global_variable(balance,agent_machine_id);
///////////////////// **POINT A**
modify(balance,value);
unlock_global_variable(balance,agent_machine_id);
/////////////////// **POINT B**
dequeue(); // once transaction is complete, request can be dequeued
}
,如果代理的代碼崩潰在B點,那麼顯然該請求不應該被再次處理,否則變量將兩次相同的被修改請求。爲了避免這種情況,我們可以使代碼的原子,因此:
agent
{
look_queue(); // take a look at the leftmost request on queue without dequeuing
*atomic*
{
lock_global_variable(balance,agent_machine_id);
modify(balance,value);
unlock_global_variable(balance,agent_machine_id);
dequeue(); // once transaction is complete, request can be dequeued
}
}
我尋找這些問題的答案:
- 如何確定哪些需要「自動」被自動執行的代碼點?
- 如果代碼在執行過程中崩潰,「記錄事務和變量值」有多大幫助?是否有其他方法來解決崩潰代理的問題?
- 此外,日誌記錄不能擴展到大量變量的大型應用程序。在這種情況下我們能做些什麼 - 而不是從頭開始重新執行?
- 一般來說,如果代理商一起工作,如何識別這樣的原子塊。如果一個代理失敗了,其他人不得不等待它重新啓動? 軟件測試如何幫助我們識別潛在的情況,其中如果代理崩潰,則觀察到不一致的程序狀態。
- 如何讓原子塊更加細化,減少性能瓶頸?
感謝您的詳細解答。我會閱讀你建議的東西:) – user655617 2011-03-13 17:25:52