å 容æ¥èªäºå¾®è½¯ç宿¹ææ¡£ https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/Orleans20Best20Practices.pdf
ï¼å¯è½æç¹æ§ï¼æ¯ä¸åå¹´åçèµæäºï¼ï¼ä½æ¯ä¸æé¢å没æ¾å°ï¼æå°±ç»æ¬è¿æ¥äºï¼
Scenarios & General Fit
ä»ä¹æ¶åæä»¬éè¦è¯è¯çOrleans
- æ¥æå¤§éï¼æç¾ä¸åä¸çï¼ä½è¦åçå®ä½
- å®ä½è¶³å¤å°å°å¯ä»¥å¨åä¸çº¿ç¨ä¸å®æå·¥ä½
- 以â请汖ååºâæâå¯å¨–çæµ–宿âçäº¤äºæ¹å¼å·¥ä½ç
- éè¦æå¯è½éè¦å¨ä¸æ¢ä¸å°æå¡å¨ä¸ååå·¥ä½ï¼é群ï¼
- 䏿¬¡åªéè¦å¨å 个å®ä½ä¹é´è¿è¡åè°å·¥ä½ï¼èä¸éè¦æ´ä½çåè°å·¥ä½ã
- å¨ä¸åäºä»¶ä½¿ç¨ä¸åçå®ä½ãï¼è§å ·ä½æ åµï¼
ä¸éç¨äºä»¥ä¸æ åµ
- å®ä½éè¦ç´æ¥å»è®¿é®å½¼æ¤çå åã
- æ°éå°ï¼ä½æ¯åä½åºå¤§çãéè¦å¨å¤çº¿ç¨ä¸å·¥ä½çå®ä½
- éè¦æ´ä½çåè°åä¸è´æ§
- é¿æä¸ç´è¿è¡çæä½ãæ¹å¤çæSIMDï¼è§å ·ä½æ åµï¼
设计Grains
- Actor 并䏿¯å¹³æ¶çè§£çObject , 尽管å®ä»¬é常ç¸ä¼¼ã
- ä½è¦åãåºæ¬ç¬ç«
- ç¬ç«äºå ¶ä»çGrainså»å°è£ å管çå®ä»¬çç¶æã
- å¯ä»¥åç¬åºæ éï¼èªéå¯ä»¥ï¼ä½ä¸è¦å½±åå ¶ä»Grainsç»§ç»å·¥ä½ï¼
- é¿å
Grainsä¹é´æé¢ç¹ç交æµ
- æ¶æ¯ä¼ éç¸è¾äºç´æ¥è®¿é®å åçæ¹å¼ï¼æ§è½å¼éç代价è¦å¤§å¾å¤
- å¦æä¸¤ä¸ªGrainsä¹é´ä¸ç´æé¢ç¹çäºè°ç¨ï¼ä¹è®¸åºè¯¥èèæ¯ä¸æ¯åºè¯¥æå®ä¸¤è®¾è®¡åå¹¶æä¸ä¸ªGrains
- è¦èèåæ°ç尺寸åå¤æåº¦ï¼ä»¥ååºååé®é¢ã
- ææ¶åï¼éåä¸ä¸ªäºè¿å¶æ¶æ¯å¹¶ååºåå两次çå¼éæ¯æ¯è¾å°çã
- é¿å
Grainsçç¶é¢
- åä¸çè°åº¦è ãç»è®°å¤æçæµå¨
- 妿æå¿ è¦çè¯ï¼è¿è¡å段çèå
å®ç°Grains ââ 弿¥
- ä¸åé½åºè¯¥æ¯å¼æ¥çï¼TPLï¼ï¼ä¸è¦æå µå¡çº¿ç¨çæä½
- æä½³çå®è·µæºå¶æ¯ async/await
ç»å ¸æ¡ä¾ï¼
è¿åä¸ä¸ªå ·ä½çå¼ï¼
return Task.FromResult(value);
è¿åä¸ä¸ªåç±»åçTask
return foo.Bar();
await ä¸ä¸ª Taskä¹åç»§ç»æ§è¡ç¹ä»ä¹
var x = await bar.Foo();
var y = DoSomething(x);
return y;
Fan-out:
var tasks = new List
foreach(var grain in grains)
tasks.Add(grain.Foo());
await Task.WhenAll(tasks);
DoMore();
å®ç°Grains
ä»ä¹æ¶å使ç¨[StatelessWorker]
- åè½æä½ï¼ è§£ç ãè§£å缩ï¼ç¶å转åå¤ç
- 夿¬¡æ¿æ´»ï¼å¹¶ä¸æ»æ¯å¨æ¬å°ç
- æ¯å¦ï¼è¯å¥½çåæ®µèåï¼é¦å 卿¬å°ï¼ä¸å¨Siloä¸ï¼
é»è®¤æ åµä¸ï¼Grainsæ¯ä¸å¯ä»¥éå ¥çï¼ææåºè¯¥æ¯ä¸å¯ä»¥éå½ï¼
- å¨è°ç¨å¨æä¸ä¼åºç°æ»éï¼ æ¯å¦è°ç¨èªèº«
- æ»éä¼å ä¸ºè¶ æ¶èèªå¨ä¸æ¢ã
- 使ç¨
[Reentrant]
屿§ï¼attributeï¼æ¥ä½¿ä¸ä¸ªGrainç±»å¯éå ¥ã - éå ¥å°ä¾ç¶æ¯å线ç¨ä¸çï¼ä½æ¯å¯è½ä¼äº¤åã
- å¤ç交åé®é¢å®¹æåºéã
ç»§æ¿
- ç»§æ¿ä¸ä¸ªGrainçæ¥å£ï¼interfaceï¼æ¯ç®åç
- å½å¤ä¸ªGrain类继æ¿äºç¸åçæ¥å£æ¶ï¼å¯è½éè¦æ¶é¤æ§ä¹ã
- Grainç±»çç»§æ¿æ¯æéç
- æä¹ å声æä¼ä¸æç»§æ¿
æ³åæ¯è¢«æ¯æç
å ³äºGrainsæä¹ åçæ¦è¿°
OrleansçGrainçç¶ææä¹ åAPIè¢«è®¾è®¡ç¨æ¥æä¾æäºä½¿ç¨ç坿©å±çåå¨åè½ã
Grainçç¶ææä¹ å
- å®ä¹ä¸ä¸ªæ¥å£ï¼
interface
ï¼ç»§æ¿èªOrleans.IGrainState
, å¹¶å¨è¯¥æ¥å£ä¸å å«Grainééè¦æä¹ åçåæ®µã - Grainç±»éè¦ç»§æ¿
GrainBase
å¹¶å¨Grainçåºç¡ç±»ä¸æ·»å 强类åStateåæ®µ