一步一步来熟悉Akka.Net(一)

一步一步来熟悉Akka.Net(一)

标签(空格分隔): .netcore 分布式


一、不利flag

??好久没写过文章了,翻开前几年写的博客,看到有两个目标“代码生成器”和“文件隐身”。说起来并不是太难的东西,难产到现在还没有出来。还有之前定的学习计划--先学习spring boot,再熟悉spring cloud,再这些基础上,再去.net环境上去寻找完善更适合的解决方案。不过学完spring boot以后,由于一些原因cloud就没继续熟悉了。

??所以,先有足够的时间和动力来实现执行力,再来说目标吧。

二、并行运算

??近些日子,遇到一个工作中的场景:将A系统的一些表同步到B系统内。因涉及到数据整合,老版写的就是按部就班的分页查询,然后调用B系统的整合数据接口整合数据,整个同步速度是相当慢的。后来改成了分页查询的数据先丢到消息队列,然后多开几个消费端去并行处理,速度翻了几十倍甚至上百倍。当然B系统也优化去掉一些查询,把能提前的查询都放到了消息队列之前,这样能提高消费速度。

??作为一个有追求的人,这样的结果是十分欣喜的。当然如果批量式的查询后,批量式的把数据整理后,批量式的提交数据库操作,速度会更加提升上百倍或千倍以上,但时间有限,牵扯部分太广,目前处理速度和业务量能应付的来,优化到此为止,思考却不会停止。

三、面向未来思考

??此处说明下,A是业务系统,B是营销系统。A系统的任何更新都会通知到B系统,B系统聚合数据,然后做出营销动作,所以B系统的动作处理时间是比A系统的更新数据时间要长的,如果A系统有大批量导入或频繁更新,B系统是很难在短时间内处理掉的。所以思考方向是:A系统积累一批更新如一分钟内,再由消息队列通知B系统,B系统批量处理这些通知。

*旧版

A系统->B系统: A单条数据的任何修改通知B

*思考版

A系统->B系统: A单条数据的修改积累到一批再通知B

以上思路,依赖HttpRuntime或Redis都能实现。但似乎要考虑加锁的问题,不太好。

??上述废话那么多,是为了讲述一个问题点。有了这个点,在熟悉分布式框架的过程中,有参考匹配价值,不会过于迷茫。

来了解下Akka.Net

??Akka.Net是用于设计跨越处理器核心和网络的可扩展的弹性系统,它允许您专注于满足业务需求,而不是编写低级代码以提供可靠的行为,容错性和高性能。Akka.NET利用参与者模型来提供抽象级别,使得编写正确的并发,并行和分布式系统变得更加容易。Actor模型跨越了Akka.NET库的集合,为您提供了一个理解和使用它们的一致方式。

什么是Actor模型

Actor基本特征是他们将世界建模为通过显式消息传递相互通信的有状态实体。

作为计算实体,Actor有这些特征:

他们使用异步消息传递来取代方法调用

他们能管理自己的状态

*当回复一个消息时,他们能:

??>创建其他的Actor

??>发送消息给其他的Actor

??>停止Actors或他们自己。

注意

由于Akka.NET强制实施家长监督,因此每位演员都受到监督,并且(可能)是其子女的监督人,因此建议您熟悉演员系统监督与监督,并且还可以帮助阅读演员参考,路径和地址

更详细的说明文档请跳转官方网站

下面开始撸代码

示例代码

*vs新建控制台项目
*Nuget安装 Akka

??

*代码(截图太麻烦,都放到一个文件里去了)
using Akka.Actor;
using System;

namespace DemoAkka.Simple
{
    class Program
    {
        static void Main(string[] args)
        {
            var system = ActorSystem.Create("MySystem");

            var greeter = system.ActorOf<GreeActor>("Student");

            while (true)
            {
                var i = Math.Abs(Guid.NewGuid().GetHashCode());
                greeter.Tell(new GreeMessage()
                {
                    MsgId = i,
                    RealName = $"Real{i}"
                });

                var key = Console.ReadLine();
                if (key == "exit")
                {
                    break;
                }
            }
        }
    }
    /// <summary>
    /// Actor,可接收消息处理。
    /// </summary>
    public class GreeActor : ReceiveActor
    {
        public GreeActor()
        {
            Receive<GreeMessage>(greet =>
            {
                Console.WriteLine($"{DateTime.Now}---MsgId:{greet.MsgId},RealName:{greet.RealName}");
            });
        }
    }

    /// <summary>
    /// 用于传递消息的实体。
    /// </summary>
    public class GreeMessage
    {
        public long MsgId { get; set; }
        public string RealName { get; set; }
    }
}
*运行效果(输入各种字符,消息传递到Actor)

??以上代码能有什么用?就我目前体会到的,也就是解耦,方便扩展。当然也是Actor模型的一个特征,消息传递来代替方法调用。

??我预想的中,应该先来个Akka.Net部分理论说明,再来说明代码部分的实现原理。可惜想的太远,实际时间太晚了。一步一步来吧。

原文地址:https://www.cnblogs.com/fancunwei/p/9249222.html

时间: 2024-11-09 00:48:50

一步一步来熟悉Akka.Net(一)的相关文章

Rhythmk 一步一步学 JAVA (21) JAVA 多线程

1.JAVA多线程简单示例 1.1 .Thread  集成接口 Runnable 1.2 .线程状态,可以通过  Thread.getState()获取线程状态: New (新创建) Runnable (可以运行) Blocked  (被阻塞) Waiting  (等待) Timed waiting (计时等待) Terminated  (被终止) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

【转】朱兆祺带你一步一步学习嵌入式(连载)

原文网址:http://bbs.elecfans.com/jishu_357014_2_1.html#comment_top  从最初涉及嵌入式Linux开始到现在,深深的知道嵌入式的每一步学习都是举步维艰.从去年11月份开始,我就着手整理各种学习资料,希望推动嵌入式学习的前进贡献自己微不足道的一份力量.从去年到现在,将C语言的学习经验整理成<攻破C语言笔试与机试陷阱及难点>(现在仍在更新),这份资料已经在电子发烧友论坛的单片机论坛连载(http://bbs.elecfans.com/jish

一步一步学Vue(十二)

为了提升代码的逼格,之后代码改为Vue文件组件,之前代码虽然读起来容易理解,而且适合在小的项目中使用,但是有如下缺点: 全局定义(Global definitions) 强制要求每个 component 中的命名不得重复 字符串模板(String templates) 缺乏语法高亮,在 HTML 有多行的时候,需要用到丑陋的 \ 不支持CSS(No CSS support) 意味着当 HTML 和 JavaScript 组件化时,CSS 明显被遗漏 没有构建步骤(No build step) 限

[ALM]一步一步搭建MS ALM环境 - 安装TFS + SQL SERVER

描述: 安装SQL SERVER 2012,安装TFS 2013,配置TFS,挽起袖子,准备干活儿 步骤: 1,打开Hyper-V Manager,参考[Hyper-V]使用操作系统模板创建新的虚拟机,先完成操作系统的安装,注意以下修改以下信息: 磁盘名称:tfs.vhdx 磁盘存储位置:x:\VMs\DC 虚拟机名称:TFS 使用现有的虚拟机磁盘:x:\VMs\DC\tfs.vhdx 选择使用内网网卡:InternalVirtualNetwork 内存大小:4096 MB 服务器角色:Team

Android教程-从零开始一步一步接入SDK

从零开始一步一步接入SDK 本篇博客想总结一下笔者在接入手游渠道SDK的一些经验方法,为想接入手游渠道或者想学习如何接入SDK的童鞋们提供一个参考.本篇博客基于Android平台,关于IOS接入SDK的方法,笔者以后有机会也会整理. 首先来给大家说明一下SDK,何为SDK?它的全称是,SoftWare Develop Kit,意思是软件开发工具包,它是可以辅助我们去开发某类软件的相关文档,范例和工具的集合.关于SDK,这里推荐一个服务商店,名叫Devstore(http://www.devsto

一步一步分析新建App启动过程

IOS温故而知新(一)  一步一步分析新建App启动过程 笔者接触IOS大概半年的时间,可以说能够开发App,但是又有很多不足的地方,因此打算写一些技术文章,能够达到温故而知新的效果,难免会有错误或者遗漏,也希望各位看官不吝指教.另外宣传一下刚建立的群“IOS菜鸟到高手之路”,312747764,欢迎希望交流分享的人加入. 1.IOS系统的简单说明IOS与Mac OS X以及安卓一样都属于类UINX系统,然而熟悉类UNIX系统的人可能会失望的是,个人开发的App会进入类似chroot的状态,被操

教你一步一步实现一个Promise

Promise我想现在大家都非常熟悉了,主要作用就是解决异步回调问题,这里简单介绍下. Promise规范是CommonJS规范之一,而Promise规范又分了好多种,比如 Promises/A.Promises/B.Promises/Kiss等等 有兴趣的可以到这多了解一些 http://wiki.commonjs.org/wiki/Promises 现在比较流行的是Promise/A规范,人们对它的完善和扩展,逐渐形成了Promise/A+规范,A+已脱颖而出. 说到这里规范是什么,可以去这

【DG】[三思笔记]一步一步学DataGuard

[DG][三思笔记]一步一步学DataGuard 它有无数个名字,有人叫它dg,有人叫它数据卫士,有人叫它data guard,在oracle的各项特性中它有着举足轻理的地位,它就是(掌声)......................Oracle Data Guard.而对于我而言,我一定要亲切的叫它:DG(注:主要是因为打着方便). 不少未实际接触过dg的初学者可能会下意识以为dg是一个备份恢复的工具.我要说的是,这种形容不完全错,dg拥有备份的功能,某些情况下它甚至可以与primary数据库

(转) 一步一步学习ASP.NET 5 (四)- ASP.NET MVC 6四大特性

转发:微软MVP 卢建晖 的文章,希望对大家有帮助.原文:http://blog.csdn.net/kinfey/article/details/44459625 编者语 : 昨晚写好的文章居然csdn不审核,这个也难怪人,但自己比较忙没办法.分享继续,今天谈ASP.NET MVC 6. 我蛮喜欢Ruby On Rails 这种约定胜于配置的框架,在.NET 有ASP.NET MVC 和Java有Play! Framework .  ASP.NET MVC 版本基本上每年一更新,从不让你失望.我