{"id":1160,"date":"2017-04-09T21:59:30","date_gmt":"2017-04-09T18:59:30","guid":{"rendered":"https:\/\/gokhan-gokalp.com\/?p=1160"},"modified":"2018-05-18T22:33:42","modified_gmt":"2018-05-18T19:33:42","slug":"microsoft-orleans-ile-distributed-virtual-actor-model-e-giris","status":"publish","type":"post","link":"https:\/\/gokhan-gokalp.com\/tr\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/","title":{"rendered":"Microsoft Orleans ile Distributed Virtual Actor Model&#8217;e Giri\u015f"},"content":{"rendered":"<p>Merhaba arkada\u015flar.<\/p>\n<p>Bu makale konumda straightforward bir \u015fekilde <strong>concurrency<\/strong> problemlerini d\u00fc\u015f\u00fcnmeden, distributed bir \u015fekilde <strong>high-scale<\/strong> application&#8217;lar geli\u015ftirebilmemize olanak sa\u011flayan <strong>Orleans<\/strong> project konusuna giri\u015f yapmak istiyorum.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/03\/orleans-project.png\"><img decoding=\"async\" class=\"aligncenter wp-image-1168 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/03\/orleans-project.png\" alt=\"\" width=\"562\" height=\"215\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/orleans-project.png 1339w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/orleans-project-300x115.png 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/orleans-project-768x294.png 768w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/orleans-project-1024x392.png 1024w\" data-sizes=\"(max-width: 562px) 100vw, 562px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 562px; --smush-placeholder-aspect-ratio: 562\/215;\" \/><\/a><\/p>\n<h4>Nedir Bu Orleans Project?<\/h4>\n<blockquote><p>Yukar\u0131da da bahsetti\u011fim gibi, concurrency problemlerini d\u00fc\u015f\u00fcnmeden <strong>high-scale<\/strong>, <strong>distributed cloud-based<\/strong> uygulamalar geli\u015ftirebilmemiz i\u00e7in Microsoft&#8217;un 2014 y\u0131l\u0131nda duyurmu\u015f oldu\u011fu bir framework\/platform&#8217;dur.<\/p><\/blockquote>\n<p>Orleans, concurrency ve high-scale gibi problemleri \u00e7\u00f6zebilmek i\u00e7in\u00a0altyap\u0131s\u0131nda <em><a href=\"https:\/\/en.wikipedia.org\/wiki\/Actor_model\" target=\"_blank\" rel=\"noopener noreferrer\">Actor Model<\/a><\/em> yakla\u015f\u0131m\u0131n\u0131 temel almaktad\u0131r ve tamamen\u00a0<strong>horizontal scalability<\/strong>&#8216;e odaklanmaktad\u0131r.<\/p>\n<h5>Actor&#8217;ler hakk\u0131nda bir ka\u00e7 \u015fey s\u00f6ylemem gerekirse e\u011fer:<\/h5>\n<ul>\n<li>Her \u015feyden \u00f6nce message odakl\u0131d\u0131rlar (her bir actor&#8217;un, bir mailbox&#8217;\u0131 vard\u0131r)<\/li>\n<li>Tamamen async bir yap\u0131ya sahiptirler<\/li>\n<li>Her bir akt\u00f6r, bir di\u011ferinden ba\u011f\u0131ms\u0131zd\u0131r (memory share etmezler) ve birbirlerine message g\u00f6nderebilirler<\/li>\n<li>Y\u00fcksek performanslara sahiptirler<\/li>\n<\/ul>\n<h5><img decoding=\"async\" class=\"aligncenter wp-image-1170 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/04\/actors.png\" alt=\"\" width=\"439\" height=\"273\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/04\/actors.png 604w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/04\/actors-300x187.png 300w\" data-sizes=\"(max-width: 439px) 100vw, 439px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 439px; --smush-placeholder-aspect-ratio: 439\/273;\" \/><\/h5>\n<h5>Peki actor&#8217;ler k\u0131saca ne yapar?<\/h5>\n<ul>\n<li>Birden fazla actor yaratabilirler<\/li>\n<li>Message&#8217;\u0131 bir di\u011fer actor&#8217;e g\u00f6nderebilirler<\/li>\n<li>Bir sonraki message ile, ne yap\u0131laca\u011f\u0131n\u0131 belirtirler<\/li>\n<\/ul>\n<p>Buradan anlayabilece\u011fimiz \u00fczere, message&#8217;lar sayesinde actor&#8217;ler ya\u015famlar\u0131n\u0131 s\u00fcrd\u00fcrebilmektedirler ve actor&#8217;ler bir y\u0131\u011f\u0131ndan meydana gelmektedirler. Bu model&#8217;in \u00f6z\u00fc, actor&#8217;leri temel olarak <strong>basit\u00a0computing units<\/strong> olarak kullanmakt\u0131r diyebiliriz. Ayr\u0131ca actor&#8217;ler state&#8217;leri tutabildi\u011fi gibi, davran\u0131\u015flar\u0131 da tutabilmektedir ve di\u011fer actor&#8217;ler ile message yoluyla ileti\u015fim kurabilmektedirler.<\/p>\n<p>Orleans ise actor based bir platform&#8217;dur.\u00a0Actor model, yap\u0131s\u0131 gere\u011fi <strong>high availability<\/strong> ve <strong>low latency<\/strong>&#8216;i kolayl\u0131kla sa\u011flayabilmektedir. Orleans di\u011fer actor model platform&#8217;lar\u0131n\u0131n aksine virtual actor abstraction&#8217;\u0131 ile\u00a0<strong>reliability<\/strong> ve <strong>distributed resource management<\/strong>\u00a0gibi bir \u00e7ok complexity&#8217;i kendisi handle edip, developer&#8217;a herhangi bir ek distributed system problem&#8217;leri \u00e7\u0131kartmamaktad\u0131r.<\/p>\n<p>Ayr\u0131ca actor&#8217;ler i\u00e7erisinde\u00a0single-threaded execution context sundu\u011fundan dolay\u0131, concurrency gibi problemleri d\u00fc\u015f\u00fcnmeden geli\u015ftirme yapabilmeye de olanak sa\u011flamaktad\u0131r. Bunlara ek olarak Orleans taraf\u0131nda cluster i\u00e7erisine <strong>dynamically<\/strong> olarak\u00a0node&#8217;lar eklenebilmektedir ve y\u00fck\u00fc bunlara otomatik olarak distribute edebilmektedir de.<\/p>\n<h4>Hello World<\/h4>\n<p>Dilerseniz konunun devam\u0131na hello world d\u00fczeyinde \u00f6rnek bir proje ile devam edelim. \u00d6rne\u011fimizi ger\u00e7ekle\u015ftirirken baz\u0131 Orleans terimlerine de de\u011finiyor olaca\u011f\u0131z. \u00d6ncelikle <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=sbykov.MicrosoftOrleansToolsforVisualStudio\" target=\"_blank\" rel=\"noopener noreferrer\">buraya<\/a>\u00a0t\u0131klayarak, Visual Studio \u00fczerine\u00a0Microsoft Orleans Tools&#8217;u indirelim ve ard\u0131ndan kurulum i\u015flemini ger\u00e7ekle\u015ftirelim. Bu paket ile bir \u00e7ok initialization i\u015flemlerinden kurtulaca\u011f\u0131z ve bir ka\u00e7 wrapper&#8217;a sahip olaca\u011f\u0131z.<\/p>\n<p>&#8220;OrleansHelloWorld&#8221; isminde bir blank solution olu\u015ftural\u0131m ve i\u00e7erisine a\u015fa\u011f\u0131daki gibi &#8220;HelloWorldGrainInterfaces&#8221; isminde bir Orleans Grain Interface Collection projesi ekleyelim.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/04\/helloworld-grain-interface-collection.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1175 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/04\/helloworld-grain-interface-collection.jpg\" alt=\"\" width=\"831\" height=\"443\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/04\/helloworld-grain-interface-collection.jpg 831w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/04\/helloworld-grain-interface-collection-300x160.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/04\/helloworld-grain-interface-collection-768x409.jpg 768w\" data-sizes=\"(max-width: 831px) 100vw, 831px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 831px; --smush-placeholder-aspect-ratio: 831\/443;\" \/><\/a><\/p>\n<p>Ekledikten sonra otomatik olarak olu\u015fan &#8220;IGrain1&#8221; interface&#8217;ini &#8220;IHello&#8221; olarak g\u00fcncelleyerek, a\u015fa\u011f\u0131daki gibi d\u00fczenleyelim.<\/p>\n<pre class=\"lang:c# decode:true\">using System.Threading.Tasks;\r\nusing Orleans;\r\n\r\nnamespace HelloWorldGrainInterfaces\r\n{\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Grain interface IHello\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public interface IHello : IGrainWithIntegerKey\r\n    {\r\n        Task&lt;string&gt; SayHello(string name);\r\n    }\r\n}<\/pre>\n<p>Peki nedir bu <strong>Grain<\/strong> dersek e\u011fer, Orleans i\u00e7erisindeki actor&#8217;ler, Grain olarak adland\u0131r\u0131lmaktad\u0131r. Bunun d\u0131\u015f\u0131nda eklemi\u015f oldu\u011fumuz &#8220;SayHello&#8221; method&#8217;una dikkat edersek e\u011fer, Orleans implemente edilecek t\u00fcm method&#8217;lar\u0131 <strong>async<\/strong>\u00a0olarak istemektedir. Su sebeple task based olarak kodlama yapmam\u0131z gerekmektedir.<\/p>\n<p>\u015eimdi ise concrete grain&#8217;i olu\u015fturabilmek i\u00e7in solution i\u00e7erisine, &#8220;HelloWorldGrains&#8221; isminde bir\u00a0Orleans Grain Class Collection projesi ekleyelim ve ard\u0131ndan &#8220;HelloWorldGrainInterfaces&#8221; projesini referans olarak g\u00f6sterelim. Projenin eklenmesinden sonra default olarak elen &#8220;Grain1&#8221; isimli class&#8217;\u0131, &#8220;HelloGrain&#8221; olarak g\u00fcncelleyelim ve a\u015fa\u011f\u0131daki gibi kodlayal\u0131m.<\/p>\n<pre class=\"lang:c# decode:true\">using System.Threading.Tasks;\r\nusing Orleans;\r\nusing HelloWorldGrainInterfaces;\r\n\r\nnamespace HelloWorldGrains\r\n{\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Grain implementation class HelloGrain.\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class HelloGrain : Grain, IHello\r\n    {\r\n        public Task&lt;string&gt; SayHello(string name)\r\n        {\r\n            return Task.FromResult($\"Hello {name}\");\r\n        }\r\n    }\r\n}<\/pre>\n<p>public class HelloGrain : Grain, IHello { public Task SayHello(string name) { return Task.FromResult($&#8221;Hello {name}&#8221;); } } }<\/p>\n<p>Grain implementasyonu i\u00e7in &#8220;Grain&#8221; abstract class&#8217;\u0131n\u0131 ve olu\u015fturmu\u015f oldu\u011fumuz &#8220;IHello&#8221; interface&#8217;ini implemente ettik.<\/p>\n<p>\u015eimdi s\u0131ra geldi grain&#8217;leri host edece\u011fimiz silo&#8217;yu olu\u015fturmaya. Silo \u00fczerinden self-hosted olarak olu\u015fturmu\u015f oldu\u011fumuz &#8220;HelloGrain&#8221; i active edip, invoke edece\u011fiz. Bunun i\u00e7in \u00f6ncelikle &#8220;HelloWorld&#8221; isminde bir Orleans Dev\/Test Host projesi olu\u015ftural\u0131m.<\/p>\n<p>Projenin olu\u015fturulmas\u0131n\u0131n ard\u0131ndan &#8220;HelloWorldGrainInterfaces&#8221; ve &#8220;HelloWorldGrains&#8221; projelerini referans olarak ekleyelim. &#8220;Program.cs&#8221; i a\u00e7arsan\u0131z otomatik olarak Orleans taraf\u0131ndan, Orleans test silo host template&#8217;i geldi\u011fini g\u00f6rebilirsiniz.<\/p>\n<pre class=\"lang:c# decode:true\">using System;\r\n\r\nusing Orleans;\r\nusing Orleans.Runtime.Configuration;\r\nusing HelloWorldGrainInterfaces;\r\n\r\nnamespace HelloWorld\r\n{\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Orleans test silo host\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class Program\r\n    {\r\n        static void Main(string[] args)\r\n        {\r\n            \/\/ The Orleans silo environment is initialized in its own app domain in order to more\r\n            \/\/ closely emulate the distributed situation, when the client and the server cannot\r\n            \/\/ pass data via shared memory.\r\n            AppDomain hostDomain = AppDomain.CreateDomain(\"OrleansHost\", null, new AppDomainSetup\r\n            {\r\n                AppDomainInitializer = InitSilo,\r\n                AppDomainInitializerArguments = args,\r\n            });\r\n\r\n            var config = ClientConfiguration.LocalhostSilo();\r\n            GrainClient.Initialize(config);\r\n\r\n            \/\/ TODO: once the previous call returns, the silo is up and running.\r\n            \/\/       This is the place your custom logic, for example calling client logic\r\n            \/\/       or initializing an HTTP front end for accepting incoming requests.\r\n\r\n            Console.WriteLine(\"Orleans Silo is running.\\nPress Enter to terminate...\");\r\n\r\n            var user = GrainClient.GrainFactory.GetGrain&lt;IHello&gt;(0);\r\n            Console.WriteLine(user.SayHello(\"G\u00f6khan\").Result);\r\n\r\n            Console.ReadLine();\r\n\r\n            hostDomain.DoCallBack(ShutdownSilo);\r\n        }\r\n\r\n        static void InitSilo(string[] args)\r\n        {\r\n            hostWrapper = new OrleansHostWrapper(args);\r\n\r\n            if (!hostWrapper.Run())\r\n            {\r\n                Console.Error.WriteLine(\"Failed to initialize Orleans silo\");\r\n            }\r\n        }\r\n\r\n        static void ShutdownSilo()\r\n        {\r\n            if (hostWrapper != null)\r\n            {\r\n                hostWrapper.Dispose();\r\n                GC.SuppressFinalize(hostWrapper);\r\n            }\r\n        }\r\n\r\n        private static OrleansHostWrapper hostWrapper;\r\n    }\r\n}<\/pre>\n<p>Template&#8217;e dikkat edersek, &#8220;OrleansHost&#8221; isminde kendi appdomain&#8217;ini olu\u015fturuyor ve init k\u0131sm\u0131nda ise &#8220;InitSilo&#8221; method&#8217;u ile, &#8220;OrleansHostWrapper&#8221; \u00fczerinden silo&#8217;nun initializing i\u015flemlerini ger\u00e7ekle\u015ftiriyor.<\/p>\n<p>A\u015fa\u011f\u0131daki kod sat\u0131rlar\u0131na dikkat edersek e\u011fer burada olu\u015fturmu\u015f oldu\u011fumuz grain&#8217;i, &#8220;GrainClient&#8221; \u00fczerinden active edip invoke ediyoruz.<\/p>\n<pre class=\"lang:c# decode:true \">var user = GrainClient.GrainFactory.GetGrain(0);\r\nConsole.WriteLine(user.SayHello(\"G\u00f6khan\").Result);<\/pre>\n<p>&#8220;HelloWorld&#8221; projesini \u00e7al\u0131\u015ft\u0131ral\u0131m ve sonucuna bir bakal\u0131m.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/04\/silo-started.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1176 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/04\/silo-started.jpg\" alt=\"\" width=\"979\" height=\"512\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/04\/silo-started.jpg 979w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/04\/silo-started-300x157.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/04\/silo-started-768x402.jpg 768w\" data-sizes=\"(max-width: 979px) 100vw, 979px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 979px; --smush-placeholder-aspect-ratio: 979\/512;\" \/><\/a><\/p>\n<p>\u0130lk ak\u0131\u015f i\u00e7erisinde dikkat edersek, en a\u015fa\u011f\u0131da &#8220;Successfully started Orleans silo &#8216;GOKGOKALP&#8217; as a Primary node.&#8221; mesaj\u0131n\u0131 g\u00f6rece\u011fiz. Test silo host&#8217;unu kendi process&#8217;imiz \u00fczerinde ba\u015flatt\u0131\u011f\u0131m\u0131z i\u00e7in, otomatik bir \u015fekilde primary node olarak belirlemi\u015ftir. Ak\u0131\u015f\u0131n devam\u0131na bakt\u0131\u011f\u0131m\u0131zda ise:<\/p>\n<p><a href=\"\/wp-content\/uploads\/2017\/04\/grain-started.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1177 lazyload\" data-src=\"\/wp-content\/uploads\/2017\/04\/grain-started.jpg\" alt=\"\" width=\"979\" height=\"512\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/04\/grain-started.jpg 979w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/04\/grain-started-300x157.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/04\/grain-started-768x402.jpg 768w\" data-sizes=\"(max-width: 979px) 100vw, 979px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 979px; --smush-placeholder-aspect-ratio: 979\/512;\" \/><\/a><\/p>\n<p>Silo active olmas\u0131n\u0131n\u00a0ard\u0131ndan, &#8220;HelloGrain&#8221; i active edip invoke etmi\u015ftir. Bunun sonucunda ise &#8220;Hello G\u00f6khan&#8221; mesaj&#8217;\u0131n\u0131 g\u00f6rebilmekteyiz.<\/p>\n<p>Orleans&#8217;a giri\u015f konusuna g\u00f6re, umar\u0131m yeterli bilgiler\u00a0payla\u015fabilmi\u015fimdir. Orleans \u00fczerindeki \u00e7al\u0131\u015fmalar\u0131m devam ediyor ve\u00a0sonraki makalelerimde ise stateful bir grain nas\u0131l tasarlan\u0131r, bir grain down olursa\u00a0e\u011fer leaf grain ile process kald\u0131\u011f\u0131 yerden nas\u0131l devam edebilir gibi \u00f6rnekleri ger\u00e7ekle\u015ftirmeye \u00e7al\u0131\u015faca\u011f\u0131m.<\/p>\n<p>\u00d6rnek projeye\u00a0<a href=\"https:\/\/github.com\/GokGokalp\/orleans-helloworld\" target=\"_blank\" rel=\"noopener noreferrer\">buradan<\/a> eri\u015febilirsiniz.<\/p>\n<p>Ayr\u0131ca Orleans ile ilgili baz\u0131 \u00f6rneklere, kendi github hesaplar\u0131 \u00fczerinden de eri\u015febilirsiniz.<\/p>\n<blockquote><p>https:\/\/github.com\/dotnet\/orleans<\/p><\/blockquote>\n<p>Takipte kal\u0131n&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Merhaba arkada\u015flar. Bu makale konumda straightforward bir \u015fekilde concurrency problemlerini d\u00fc\u015f\u00fcnmeden, distributed bir \u015fekilde high-scale application&#8217;lar geli\u015ftirebilmemize olanak sa\u011flayan Orleans project konusuna giri\u015f yapmak istiyorum. Nedir Bu Orleans Project? Yukar\u0131da da bahsetti\u011fim gibi, concurrency problemlerini d\u00fc\u015f\u00fcnmeden high-scale, distributed cloud-based uygulamalar geli\u015ftirebilmemiz i\u00e7in Microsoft&#8217;un 2014 y\u0131l\u0131nda&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/gokhan-gokalp.com\/tr\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/\">Devam\u0131n\u0131 okuyun<span class=\"screen-reader-text\">Microsoft Orleans ile Distributed Virtual Actor Model&#8217;e Giri\u015f<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":1168,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,413,68],"tags":[391,393,392,394,395,390,389],"class_list":["post-1160","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net","category-actor-programming-model","category-architectural","tag-actor-model","tag-actor-model-nedir","tag-actor-model-programming","tag-c-actor-model","tag-c-orleans","tag-microsoft-orleans","tag-orleans","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"tr","enabled_languages":["en","tr"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"tr":{"title":false,"content":false,"excerpt":false}}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Microsoft Orleans ile Distributed Virtual Actor Model&#039;e Giri\u015f - G\u00f6khan G\u00f6kalp<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Microsoft Orleans ile Distributed Virtual Actor Model&#039;e Giri\u015f - G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/\" \/>\n<meta property=\"og:site_name\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-09T18:59:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-05-18T19:33:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/orleans-project.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1339\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\\\/\"},\"author\":{\"name\":\"G\u00f6khan G\u00f6kalp\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"headline\":\"Microsoft Orleans ile Distributed Virtual Actor Model&#8217;e Giri\u015f\",\"datePublished\":\"2017-04-09T18:59:30+00:00\",\"dateModified\":\"2018-05-18T19:33:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\\\/\"},\"wordCount\":903,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"image\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2017\\\/03\\\/orleans-project.png\",\"keywords\":[\"actor model\",\"actor model nedir\",\"actor model programming\",\"c# actor model\",\"c# orleans\",\"microsoft orleans\",\"orleans\"],\"articleSection\":[\".NET\",\"Actor Programming Model\",\"Architectural\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\\\/\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\\\/\",\"name\":\"Microsoft Orleans ile Distributed Virtual Actor Model'e Giri\u015f - G\u00f6khan G\u00f6kalp\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2017\\\/03\\\/orleans-project.png\",\"datePublished\":\"2017-04-09T18:59:30+00:00\",\"dateModified\":\"2018-05-18T19:33:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\\\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\\\/#primaryimage\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2017\\\/03\\\/orleans-project.png\",\"contentUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2017\\\/03\\\/orleans-project.png\",\"width\":1339,\"height\":512},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Microsoft Orleans ile Distributed Virtual Actor Model&#8217;e Giri\u015f\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"description\":\"C# &amp; Python lover\",\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gokhan-gokalp.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"pronouns\":\"he\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1777985325\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1777985325\",\"contentUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1777985325\",\"caption\":\"G\u00f6khan G\u00f6kalp\"},\"logo\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1777985325\"},\"sameAs\":[\"https:\\\/\\\/gokhan-gokalp.com\"],\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/tr\\\/author\\\/gok-gokalp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Microsoft Orleans ile Distributed Virtual Actor Model'e Giri\u015f - G\u00f6khan G\u00f6kalp","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/","og_locale":"tr_TR","og_type":"article","og_title":"Microsoft Orleans ile Distributed Virtual Actor Model'e Giri\u015f - G\u00f6khan G\u00f6kalp","og_url":"https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/","og_site_name":"G\u00f6khan G\u00f6kalp","article_published_time":"2017-04-09T18:59:30+00:00","article_modified_time":"2018-05-18T19:33:42+00:00","og_image":[{"width":1339,"height":512,"url":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/orleans-project.png","type":"image\/png"}],"author":"G\u00f6khan G\u00f6kalp","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"G\u00f6khan G\u00f6kalp","Tahmini okuma s\u00fcresi":"6 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/#article","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/"},"author":{"name":"G\u00f6khan G\u00f6kalp","@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"headline":"Microsoft Orleans ile Distributed Virtual Actor Model&#8217;e Giri\u015f","datePublished":"2017-04-09T18:59:30+00:00","dateModified":"2018-05-18T19:33:42+00:00","mainEntityOfPage":{"@id":"https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/"},"wordCount":903,"commentCount":2,"publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"image":{"@id":"https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/#primaryimage"},"thumbnailUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/orleans-project.png","keywords":["actor model","actor model nedir","actor model programming","c# actor model","c# orleans","microsoft orleans","orleans"],"articleSection":[".NET","Actor Programming Model","Architectural"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/","url":"https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/","name":"Microsoft Orleans ile Distributed Virtual Actor Model'e Giri\u015f - G\u00f6khan G\u00f6kalp","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/#primaryimage"},"image":{"@id":"https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/#primaryimage"},"thumbnailUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/orleans-project.png","datePublished":"2017-04-09T18:59:30+00:00","dateModified":"2018-05-18T19:33:42+00:00","breadcrumb":{"@id":"https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/"]}]},{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/#primaryimage","url":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/orleans-project.png","contentUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2017\/03\/orleans-project.png","width":1339,"height":512},{"@type":"BreadcrumbList","@id":"https:\/\/gokhan-gokalp.com\/microsoft-orleans-ile-distributed-virtual-actor-model-e-giris\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gokhan-gokalp.com\/"},{"@type":"ListItem","position":2,"name":"Microsoft Orleans ile Distributed Virtual Actor Model&#8217;e Giri\u015f"}]},{"@type":"WebSite","@id":"https:\/\/gokhan-gokalp.com\/#website","url":"https:\/\/gokhan-gokalp.com\/","name":"G\u00f6khan G\u00f6kalp","description":"C# &amp; Python lover","publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gokhan-gokalp.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe","name":"G\u00f6khan G\u00f6kalp","pronouns":"he","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1777985325","url":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1777985325","contentUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1777985325","caption":"G\u00f6khan G\u00f6kalp"},"logo":{"@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1777985325"},"sameAs":["https:\/\/gokhan-gokalp.com"],"url":"https:\/\/gokhan-gokalp.com\/tr\/author\/gok-gokalp\/"}]}},"_links":{"self":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/1160","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/comments?post=1160"}],"version-history":[{"count":19,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/1160\/revisions"}],"predecessor-version":[{"id":1401,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/1160\/revisions\/1401"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/media\/1168"}],"wp:attachment":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/media?parent=1160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/categories?post=1160"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/tags?post=1160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}