如何构建一套分布式程序一直是我想知道的问题。
Akka就是一套用来开发分布式系统的开发库。当然开发分布式系统只是它的能力之一。除此之外高度抽象的并行运算能力,轻量级的消息系统,容错能力都是该库的特点。
首先一个重要的概念就是Actor,Akka系统用Actor来表达任务。Actor可以理解为是一个角色,我们通过消息来告诉他做什么事,而不是主动去控制他。既然他不受我们控制,那我们也不用100%的对他负责。我们需要做的是管理好他们,而他们需要把活干好。事件系统还可以将多任务并行运算的能力给释放出来。设想一下,在并行运算中比较多考虑的就是共享资源的处理。多个任务或存或取某个独占资源,这时我们需要把一切安排的井井有条,这是传统的做法。换个角度,如果共享资源由一个任务进行管理呢?需要使用共享资源的任务都给该任务发消息,他们之间通过消息来进行信息传递。清晰的权责划分之后,我们就可以把一些复杂的共享逻辑合并在一处。而任务的执行则可以更顺畅的进行,这是非消息系统所不具有的能力。
Akka的第一个程序
该任务就是简单的构建最基础的内容,网上有fsharp的例子,这里我用fsharp来实现csharp给出的例子,看的更清晰一些。
0.定义消息Message和Actor
1.构建ActorSystem
2.在ActorSystem的基础上生成Actor
3.给Actor发消息,触发Actor的动作
#I __SOURCE_DIRECTORY__ #r @"..DPinUserControlpackagesAkka.1.2.0lib et45Akka.dll" #r @"..DPinUserControlpackagesSystem.Collections.Immutable.1.3.1lib etstandard1.0System.Collections.Immutable.dll" #r @"..DPinUserControlpackagesNewtonsoft.Json.9.0.1lib et45Newtonsoft.Json.dll" open Akka open Akka.Actor open System //0 type Greet(who:string) = member x.Who = who type GreetActor() = inherit ReceiveActor() do base.Receive<Greet>(fun (greet:Greet) -> Console.WriteLine("Hello {0}", greet.Who)) |> ignore //1 let system = ActorSystem.Create("Alpha") //2 let actor = system.ActorOf<GreetActor>("SomeOne") //3 actor.Tell(new Greet("XX"))