erlang

在JAVA中线程到底起到什么作用!

此生再无相见时 提交于 2020-04-15 05:42:11
【推荐阅读】微服务还能火多久?>>> 这是javaeye上非常经典的关于线程的帖子,写的非常通俗易懂的,适合任何读计算机的同学. 线程同步 我们可以在计算机上运行各种计算机软件程序。每一个运行的程序可能包括多个独立运行的线程(Thread)。 线程(Thread)是一份独立运行的程序,有自己专用的运行栈。线程有可能和其他线程共享一些资源,比如,内存,文件,数据库等。 当多个线程同时读写同一份共享资源的时候,可能会引起冲突。这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢作一团。 同步这个词是从英文synchronize(使同时发生)翻译过来的。我也不明白为什么要用这个很容易引起误解的词。既然大家都这么用,咱们也就只好这么将就。 线程同步的真实意思和字面意思恰好相反。线程同步的真实意思,其实是“排队”:几个线程之间要排队,一个一个对共享资源进行操作,而不是同时进行操作。 因此,关于线程同步,需要牢牢记住的第一点是:线程同步就是线程排队。同步就是排队。线程同步的目的就是避免线程“同步”执行。这可真是个无聊的绕口令。 关于线程同步,需要牢牢记住的第二点是 “共享”这两个字。只有共享资源的读写访问才需要同步。如果不是共享资源,那么就根本没有同步的必要。 关于线程同步,需要牢牢记住的第三点是,只有“变量”才需要同步访问。如果共享的资源是固定不变的

C#队列学习笔记:RabbitMQ安装及使用

▼魔方 西西 提交于 2020-04-12 09:09:59
原文: C#队列学习笔记:RabbitMQ安装及使用 一、环境搭建 1.1、由于RabbitMQ是使用Erlang语言开发的,因此要安装Erlang运行时环境,下载地址: Erlang官网下载 CSDN分享下载 1.2、去RabbitMQ官网下载 RabbitMQ Server 服务端程序,选择合适的平台版本下载并安装。 RabbitMQ安装时,会自动在Windows服务中创建RabbitMQ服务,并自动启动。 1.3、开始->所有程序->RabbitMQ Server->RabbitMQ Command Prompt (sbin dir): 运行RabbitMQ Command Prompt与cmd下cd C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.3\sbin的效果是一样的。 1.3.1、sbin目录下的rabbitmqctl.bat,是用来查看和控制服务端状态的。运行rabbitmqctl status检查RabbitMQ状态: 1.3.3、RabbitMQ Server上面也有用户概念,使用rabbitmqctl list_users命令,可以看到目前的用户: 可以看到,现在只有一个名为gues角色为administratort的用户,这个是RabbitMQ默认为我们创建的,它有RabbitMQ的所有权限

C#队列学习笔记:RabbitMQ搭建集群

强颜欢笑 提交于 2020-04-12 09:01:02
原文: C#队列学习笔记:RabbitMQ搭建集群 一、环境准备 假设有两台服务器: 注意事项: 1)所有服务器的Erlang及RabbitMQ版本必须一样。 2)服务器名大小写敏感。 二、开始搭建 2.1、设置hosts文件 路径如下:C:\Windows\System32\drivers\etc 在hosts文件中添加主机及备机的IP地址及计算机名。需要注意的是:主机及备机都要设。 2.2、开启集群端口 假如您的主机及备机都没有开启防火墙,2.2可以略过;若开启了防火墙,需要在开启了防火墙的服务器上的入站规则中添加以下3个端口: 1) 15672是管理界面使用的端口; 2)25672是集群之间使用的端口; 3)4369是E rlang进程 epmd用来做 node连接的端口。 下面以建15672端口为例,其它的原理是一样的: 2.2.1、控制面板\所有控制面板项\Windows 防火墙->高级设置->入站规则。 2.2.2、右键新建规则->选择端口->下一步。 2.2.3、在特定本地端口中输入端口号15672->下一步。 2.2.4、下一步。 2.2.5、下一步。 2.2.6、输入名称,如15672->完成。 3、设置 Cookie 由于RabbitMQ的集群是依附于Erlang的集群来工作的,所以必须先构建起Erlang的集群镜像

RabbitMQ集群架构(HA)并结合.NET Core实操

扶醉桌前 提交于 2020-04-10 11:18:20
一、前言   已经一年没有更新博客了,由于公司事务比较多,并且楼主我也积极在公司项目中不断实践.net core、DDD以及Abp vnext,也积累了一些吐血经验,目前我在做一家在线教育公司负责智慧校园业务,所涉及到的数据一天达上百万,并且还需要对这些并发数据进行解析转化,在此次的过程中也涉及到了使用RabbitMQ进行业务的解耦和流量削峰来应对如此大量的请求;过程是痛苦的,但结果是美好的。 说到MQ,大家应该都听过,像RabbitMQ,Kfaka,Activemq,rocketmq等,消息队列是一种跨进程的通信机制,主要用于上下游之间传递消息的,主要给我们解决了“应用解耦”、“流量削峰”、“异步通信”等,下图是针对MQ的对比图,如果不完善的地方请海涵: 二、RabbitMQ说明 1、在这么多的MQ中,我为什么选择使用RabbitMQ呢?其实最主要的原因是它是部署最广泛的开源消息代理,有成千上万的用户,社区支持性非常好,支持许多操作系统和云环境上运行,也支持多种消息传递协议,关键还是部署简单,在高并发、高可用中有成熟的方案,详情见官方文档: RabbitMQ 2、在针对RabbitMQ集群架构方案中,有四种架构模式,主备模式、镜像模式、远程模式、多活模式,每种架构都可以算很实用,在企业中“镜像模式”也是用的最多的,最普遍的。 3、RabbitMQ 六种工作模式 点对点模式(一对一

RabbitMQ集群架构(HA)并结合.NET Core实操

喜你入骨 提交于 2020-04-10 11:17:12
一、前言   已经一年没有更新博客了,由于公司事务比较多,并且楼主我也积极在公司项目中不断实践.net core、DDD以及Abp vnext,也积累了一些吐血经验,目前我在做一家在线教育公司负责智慧校园业务,所涉及到的数据一天达上百万,并且还需要对这些并发数据进行解析转化,在此次的过程中也涉及到了使用RabbitMQ进行业务的解耦和流量削峰来应对如此大量的请求;过程是痛苦的,但结果是美好的。 说到MQ,大家应该都听过,像RabbitMQ,Kfaka,Activemq,rocketmq等,消息队列是一种跨进程的通信机制,主要用于上下游之间传递消息的,主要给我们解决了“应用解耦”、“流量削峰”、“异步通信”等,下图是针对MQ的对比图,如果不完善的地方请海涵: 二、RabbitMQ说明 1、在这么多的MQ中,我为什么选择使用RabbitMQ呢?其实最主要的原因是它是部署最广泛的开源消息代理,有成千上万的用户,社区支持性非常好,支持许多操作系统和云环境上运行,也支持多种消息传递协议,关键还是部署简单,在高并发、高可用中有成熟的方案,详情见官方文档: RabbitMQ 2、在针对RabbitMQ集群架构方案中,有四种架构模式,主备模式、镜像模式、远程模式、多活模式,每种架构都可以算很实用,在企业中“镜像模式”也是用的最多的,最普遍的。 3、RabbitMQ 六种工作模式 点对点模式(一对一

What's the simplest way to update mnesia schema?

邮差的信 提交于 2020-04-10 08:17:21
问题 For example, I saved {id, name} in mnesia and want to update to {id, name, age} , do I have to call transform_table every time I change schema? 回答1: The simplest way is to delete the table and recreate it. If you need to keep the data in the table, mnesia:transform_table is the way to go. 来源: https://stackoverflow.com/questions/15998244/whats-the-simplest-way-to-update-mnesia-schema

【原创】公司自研缓存系统UPU的总结

蓝咒 提交于 2020-04-08 07:32:49
公司自主研发了这样一个缓存系统(名为 UPU),规格如下: 同机房间的两个 UPU 互为主备,但同一时刻只有一个 UPU 通过 keepalived 虚地址对外提供服务,主备切换也是通过 keepalived 实现; 同一(逻辑)域内的全部 UPU 形成集群,集群间通过 Erlang/OTP 内置的 Mnesia 数据库完成数据同步; UPU 集群不存在主的概念,故可以在集群中的任意节点上进行数据更新操作; 可以进行多级域的 UPU 级联; 业务的数据更新均在本地进行,但数据会向顶级域同步; 业务的数据查询均在本地进行,但会根据具体的请求类型决定是否还向顶级域查询; UPU 服务器部署架构图 UPU 服务器内部结构(Erlang 监督树结构 ) libupu(客户端库)的结构设计 这套系统存在的部分问题 : UPU 本身不支持针对缓存消息的超时控制,而是依赖于业务程序自己的控制。在业务自身发生异常的情况下,可能出现数据的不一致或残留(已通过其他方法规避); UPU 的数据同步功能依赖于 Erlang/OTP 内置的 Mnesia 数据库,官方明确说明在发生网络分区时,可能会导致数据不一致, 原开发人员本来打算采用 环形复制 来解决集群数据多写问题,但最终没有实现 ; 在 UPU 级联情况下,级联相关配置是手动写死在配置文件中的,在出现异常时,只能通过修改配置并重启服务的方式进行恢复

基于Win10搭建Elixir开发环境

不想你离开。 提交于 2020-04-07 19:28:45
基于Win10搭建Elixir开发环境 Elixir1.10.2 + Erlang22.3 Elixir1.10.2 + Erlang22.3 SDK 快捷地址下载 一、 下载并安装Erlang 1. 下载 官方地址下载: https://www.erlang.org/downloads 2. 安装 下载完成后直接双击 otp_win64_22.3.exe 安装即可,安装完成后配置一下环境变量: 3. 测试是否安装成功 二、下载并安装Elixir 1. 下载 官方地址下载: https://github.com/elixir-lang/elixir/releases 2. 安装 解压缩:Precompiled.zip 并重命名为 elixir-1.10.2 然后配置一下环境变量 3. 测试是否安装成功 至此Elixir开发环境搭建完毕 来源: oschina 链接: https://my.oschina.net/zhenggao/blog/3223333

rabbitmq集群部署

若如初见. 提交于 2020-04-07 10:19:50
0x00 RabbiMQ简介 RabbiMQ是用Erang开发的,集群非常方便,因为Erlang天生就是一门分布式语言,但其本身并不支持负载均衡。 RabbiMQ模式 RabbitMQ模式大概分为以下三种: (1)单一模式。 (2)普通模式(默认的集群模式)。 (3) 镜像模式(把需要的队列做成镜像队列,存在于多个节点,属于RabbiMQ的HA方案,在对业务可靠性要求较高的场合中比较适用)。 要实现镜像模式,需要先搭建一个普通集群模式,在这个模式的基础上再配置镜像模式以实现高可用。 RabbiMQ特点 RabbitMQ的集群节点包括内存节点、磁盘节点。RabbitMQ支持消息的持久化 也就是数据写在磁盘上,最合适的方案就是既有内存节点,又有磁盘节点。 0x01 部署步骤 hosts环境 /etc/hosts 192.168.66.61 xx-mq-1 192.168.66.62 xx-mq-2 192.168.66.63 xx-mq-3 安装包 # wget http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el7.centos.x86_64.rpm # wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-3.6.15

RabbitMQ 消息中间件搭建详解

孤人 提交于 2020-04-06 18:44:46
1.RabbitMQ简介 消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。 RabbitMQ是使用Erlang语言开发的开源消息队列系统, 基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。 Erlang是一种通用的面向并发的编程语言 特点 可靠性 扩展性 高可用性 多种协议 多语言客户端 管理界面 插件机制 2.集群部署 1.环境部署及软件安装 准备三台虚拟机 192.168.13.139 rabbitmq-1 192.168.13.142 rabbitmq-2 192.168.13.143 rabbitmq-3 配置hosts文件更改三台MQ节点的计算机名分别为rabbitmq-1、rabbitmq-2 和rabbitmq-3,然后修改hosts配置件,并关闭防火墙和selinux 192.168.13.139 [root@rabbitmq-1 ~]# hostnamectl set-hostname rabbitmq-1 [root@rabbitmq-1 ~]# vim /etc