Erlang/OTP高可用设计:掌握这6种模式,轻松应对百万级并发

第一章:Erlang/OTP高可用架构核心理念

Erlang/OTP 专为构建高可用、分布式、容错性强的系统而设计,其核心理念贯穿于语言设计与框架实现之中。在电信级系统中常见的“九个9”(99.9999999%)可用性目标,正是 Erlang/OTP 架构能力的直接体现。

进程隔离与轻量级并发

Erlang 运行时支持成千上万个轻量级进程,每个进程独立运行且内存隔离,避免单点崩溃影响全局。进程间通过消息传递通信,杜绝共享状态引发的竞争问题。
%% 创建一个简单进程并发送消息
Pid = spawn(fun() -> 
    receive
        {From, Msg} -> From ! {self(), "Received: " ++ Msg}
    end
end),
Pid ! {self(), "Hello"},
receive
    {Pid, Reply} -> io:format("~p~n", [Reply])
end.
上述代码展示了进程创建与异步消息通信的基本模式,spawn 启动新进程,! 发送消息,receive 阻塞等待匹配消息。

错误处理与监督树机制

OTP 提供行为模式(Behaviours)和监督策略,通过监督树(Supervision Tree)组织应用结构。当子进程崩溃时,父监督者可根据预设策略重启、终止或忽略故障。
  • 瞬态(transient):仅在失败时重启
  • 临时(temporary):从不重启
  • 持久(permanent):始终重启
监督策略适用场景
one_for_one子进程相互独立
one_for_all子进程强依赖,需整体重启
rest_for_one按启动顺序,仅重启后续进程
graph TD A[Root Supervisor] --> B[Worker Process] A --> C[Sub-Supervisor] C --> D[Database Handler] C --> E[Network Listener]

第二章:进程监控与容错机制设计

2.1 理解监督树(Supervision Tree)的构建原理

在 Erlang/OTP 架构中,监督树是容错系统的核心设计模式。它通过父子进程层级关系组织应用组件,形成一棵以监督者(Supervisor)为节点、工作者(Worker)为叶的树形结构。
监督策略与重启机制
每个监督者可配置不同的重启策略,如 one_for_one、one_for_all 和 rest_for_one,决定子进程故障时的响应行为。
  • 临时(temporary):不重启
  • 短暂(transient):仅在异常退出时重启
  • 永久(permanent):始终重启
代码示例:定义监督树

-module(my_sup).
-behavior(supervisor).

init(_Args) ->
    ChildSpecs = [
        #{id => worker1,
          start => {worker, start_link, []},
          restart => permanent,
          shutdown => 5000,
          type => worker,
          modules => [worker]}
    ],
    {ok, {#{strategy => one_for_one, intensity => 3, period => 10}, ChildSpecs}}.
该代码定义了一个采用 one_for_one 策略的监督者,其子进程在崩溃后将按指定策略重启,确保系统持续可用。

2.2 实践:使用supervisor行为模块搭建容错结构

在Erlang/OTP中,`supervisor`行为模块是构建容错系统的核心组件之一。它通过监控子进程的生命周期,在异常崩溃时自动重启,保障系统的高可用性。
定义Supervisor策略
一个典型的supervisor模块需指定启动策略、最大重启频率和子进程规范:

-module(my_sup).
-behavior(supervisor).

start_link() ->
    supervisor:start_link({local, ?MODULE}, ?MODULE, []).

init([]) ->
    ChildSpec = {
        my_worker,                          % ID
        {my_worker, start_link, []},       % 重启函数
        permanent,                         % 重启策略
        5000,                              % 关机超时
        worker,                            % 进程类型
        [my_worker]                        % 回调模块
    },
    {ok, {{one_for_one, 3, 10}, [ChildSpec]}}.
其中,{one_for_one, 3, 10} 表示每10秒内最多允许3次重启,超出则终止整个监督树。
容错机制层级
  • 临时(temporary):崩溃后不重启
  • 短暂(transient):仅在异常退出时重启
  • 永久(permanent):始终重启

2.3 监控策略选择:one_for_one 与 rest_for_all 的应用场景

在 Erlang/OTP 的监督树设计中,one_for_one 和 rest_for_all 是两种关键的重启策略,适用于不同容错需求的系统架构。
one_for_one:独立进程管理
该策略下,仅崩溃的子进程会被重启,不影响其他兄弟进程。适用于各工作进程相互独立的场景,如多个客户端连接处理器。
SupFlags = #{strategy => one_for_one, intensity => 1, period => 5},
Children = [#{
    id => worker_1,
    start => {worker, start_link, []},
    restart => permanent,
    type => worker
}],
supervisor:start_link({local, my_sup}, MySup, [SupFlags, Children]).
上述配置中,每个 worker 失败时单独重启,intensity 和 period 限制单位时间内的重启次数,防止雪崩。
rest_for_all:强一致性依赖
当子进程间存在共享状态或强依赖时,任一进程崩溃将导致所有子进程被终止并重启。典型用于数据库连接池与缓存协同服务。
  • one_for_one:高可用、松耦合系统
  • rest_for_all:状态强一致、紧耦合组件

2.4 故障隔离与重启强度控制实战配置

在微服务架构中,故障隔离与重启强度控制是保障系统稳定性的关键机制。通过合理配置熔断器和限流策略,可有效防止级联故障。
熔断器配置示例
circuitBreaker:
  enabled: true
  requestVolumeThreshold: 20
  errorThresholdPercentage: 50
  sleepWindowInMilliseconds: 5000
上述配置表示:当10秒内请求数达到20次且错误率超过50%时,触发熔断,5秒后进入半开状态。该策略避免了服务雪崩,同时给予下游服务恢复窗口。
重启强度控制策略
  • 采用指数退避重试机制,初始间隔1秒,最大重试5次
  • 结合队列缓冲,限制单位时间内的重启并发数
  • 通过监控指标动态调整重试频率

2.5 动态监督树扩展:运行时添加子进程

在复杂的分布式系统中,静态定义的监督树难以应对动态变化的工作负载。为此,支持运行时动态添加子进程成为提升系统弹性的重要机制。
动态注册接口
通过调用监督器的 spawn_child/2 接口,可在运行时动态启动并注册新子进程:
spawn_child(Supervisor, ChildSpec) ->
    ChildPid = spawn_link(ChildSpec#child.mfargs),
    Supervisor ! {register, ChildPid, ChildSpec},
    ChildPid.
上述代码中,ChildSpec 包含启动函数、重启策略和执行模块等元信息。通过 spawn_link 创建链接进程,并向监督器发送注册消息,实现热更新。
生命周期管理
动态添加的子进程将被纳入原有容错体系,监督器依据其 restart_intensity 和 shutdown 策略进行统一管理,确保系统稳定性不受影响。

第三章:分布式节点通信与故障检测

3.1 分布式Erlang节点间消息传递机制解析

Erlang通过内置的分布式运行时系统实现节点间的透明通信,其核心是基于进程标识(PID)和节点名称的消息传递。
消息传递基础
节点间通信使用与本地相同的 ! 操作符,但目标PID需包含节点引用。例如:
Node = 'slave@192.168.1.100'.
Pid = {worker, Node} ! {task, Data}.
该代码向远程节点上的注册进程发送消息。Erlang自动建立TCP连接(通常端口范围4369+),并序列化消息内容。
通信协议与可靠性
  • 使用EPMD(Erlang Port Mapper Daemon)发现节点端口
  • 消息通过TCP/IP传输,保证有序和可靠
  • 支持SSL加密通信以增强安全性
数据同步机制
集群状态通过心跳包维护,节点故障由分布式监控机制检测,确保消息路由表实时更新。

3.2 net_kernel与节点连接管理实战

在Erlang分布式系统中,`net_kernel` 是负责节点间通信与连接管理的核心进程。它监听节点间的网络连接,处理节点发现、握手协议及连接维持。
启动与配置分布式节点
通过启动参数或运行时调用可激活 `net_kernel`:
%% 启动命名节点
erl -name node1@192.168.1.10 -setcookie secret_cookie

%% 或在运行时设置
net_kernel:start(['node2@192.168.1.11', longnames]).
其中 `-name` 指定完整节点名,`-setcookie` 确保集群安全认证一致。
连接状态监控
可使用内置函数查看当前连接状态:
  • nodes().:列出所有已连接节点
  • net_kernel:monitor_nodes(true).:启用节点上下线事件监听
函数作用
connect_node/1主动建立到目标节点的连接
disconnect/1断开指定节点连接

3.3 节点自动发现与网络分区处理策略

在分布式系统中,节点自动发现是实现弹性扩展和高可用的基础。新节点通过注册中心或基于Gossip协议广播自身信息,快速融入集群。
基于Gossip的发现机制
  • 每个节点周期性地随机选择若干节点交换状态
  • 信息传播呈指数扩散,具备高容错性和低延迟
  • 适用于大规模动态拓扑环境
// Gossip消息传播示例
type GossipMessage struct {
    NodeID   string
    IP       string
    Port     int
    Status   string // "alive", "suspect", "dead"
    Timestamp int64
}
该结构体定义了节点间传递的核心信息,Timestamp用于冲突解决,Status支持故障检测状态转移。
网络分区应对策略
策略适用场景一致性保障
Quorum机制多数派存活强一致性
CRDTs频繁分区最终一致

第四章:状态管理与数据持久化高可用方案

4.1 ETS与DETS在高并发下的可靠性权衡

在Erlang生态系统中,ETS(Erlang Term Storage)和DETS(Disk-based Term Storage)分别提供内存与磁盘持久化存储方案。面对高并发场景,二者在性能与可靠性之间存在显著权衡。
性能与持久性对比
  • ETS基于内存,读写延迟低,支持高吞吐并发访问;
  • DETS底层依赖文件系统,每次操作涉及磁盘I/O,响应较慢但具备断电恢复能力。
典型使用场景示例

% 创建一个DETS表用于持久化缓存
{ok, Handle} = dets:open_file(cache_db, [{file, "cache.dets"}, {type, set}]).
dets:insert(Handle, {key1, "value"}).
上述代码打开一个基于磁盘的DETS表,适用于需持久化的关键数据缓存。相比ETS,虽然插入速度较慢,但在节点崩溃后数据不丢失。
可靠性权衡矩阵
特性ETSDETS
存储介质内存磁盘
读写速度极快较慢
崩溃恢复数据丢失可恢复

4.2 使用Mnesia实现分布式的高可用数据库集群

Mnesia 是 Erlang/OTP 提供的分布式数据库管理系统,专为构建高可用、低延迟的电信级应用而设计。其天然集成在 Erlang 运行时中,支持跨节点自动数据复制与故障切换。
集群搭建示例
%% 启动Mnesia节点
mnesia:create_schema([node()]).
mnesia:start().

%% 添加远程节点到集群
mnesia:create_schema(['node1@host', 'node2@host']).
mnesia:start().
上述代码初始化多节点共享的数据库模式。create_schema/1 指定参与集群的所有节点,确保各节点间可通过 Erlang 分布式协议通信。
数据同步机制
Mnesia 支持 ram_copies、disc_copies 和 disc_only_copies 三种表类型,通过 mnesia:add_table_copy/3 实现数据冗余。所有写操作在事务中执行,保障跨节点一致性。
  • 自动故障检测与主从切换
  • 支持异步(async)和同步(sync)复制模式
  • 表结构可动态重配置,适应弹性扩展需求

4.3 Mnesia事务机制与复制模式实战配置

事务处理基础
Mnesia通过mnesia:transaction/1实现ACID事务。函数内所有操作要么全部提交,要么整体回滚。
mnesia:transaction(fun() ->
    mnesia:write({user, 1, "Alice"}),
    User = mnesia:read({user, 1}),
    mnesia:write(User#user{name = "Bob"})
end).
该事务块中,写入用户记录并更新其名称。若任一操作失败,整个事务回滚,确保数据一致性。
复制模式配置
Mnesia支持多种表复制类型,可通过以下方式设置:
复制类型说明
ram_copies仅内存副本,重启丢失
disc_copies内存+磁盘持久化
disc_only_copies仅磁盘存储
在多节点集群中,使用mnesia:add_table_copy/3可动态扩展副本分布,提升容错能力。

4.4 数据分片与故障恢复流程设计

在分布式存储系统中,数据分片是提升扩展性与并发性能的核心机制。通过一致性哈希或范围分片策略,将海量数据均匀分布到多个节点,降低单点负载。
分片分配与再平衡
当新节点加入或旧节点退出时,需触发分片再平衡。以下为基于权重的动态分片迁移逻辑:

// migrateShard 迁移分片
func (c *Cluster) migrateShard(src, dst *Node, shardID int) {
    if c.isHealthy(src) && c.isHealthy(dst) {
        shard := src.GetShard(shardID)
        dst.Receive(shard)          // 目标节点接收副本
        if dst.Ack() && verifyChecksum(shard) {
            src.Delete(shardID)     // 确认后源节点删除
        }
    }
}
该函数确保迁移过程中的数据完整性,通过校验和验证防止传输损坏。
故障检测与自动恢复
使用心跳机制监控节点状态,超时未响应则标记为不可用,并启动副本重建流程。
阶段操作
检测每5秒发送心跳包
判定连续3次超时视为故障
恢复从可用副本同步缺失分片

第五章:百万级并发场景下的性能调优与稳定性保障

服务熔断与降级策略
在高并发系统中,依赖服务的延迟或失败可能引发雪崩效应。采用熔断机制可有效隔离故障。以下为使用 Go 语言结合 Hystrix 模式的实现示例:

hystrix.ConfigureCommand("fetch_user", hystrix.CommandConfig{
    Timeout:                1000,
    MaxConcurrentRequests:  100,
    ErrorPercentThreshold:  25,
})

var result string
err := hystrix.Do("fetch_user", func() error {
    return fetchUserFromRemote()
}, func(err error) error {
    // 降级逻辑
    result = "default_user"
    return nil
})
数据库连接池优化
MySQL 连接池配置直接影响系统吞吐能力。常见参数需根据负载动态调整:
参数推荐值说明
max_open_conns200最大并发连接数,避免过多连接压垮数据库
max_idle_conns50保持空闲连接,减少创建开销
conn_max_lifetime30m连接最长存活时间,防止僵死连接
缓存穿透与热点 key 应对
针对恶意请求或突发流量导致的缓存穿透,采用布隆过滤器预判数据存在性,并对热点 key 实施本地缓存 + Redis 多级缓存策略。
  • 使用 Redis Cluster 分片提升读写吞吐
  • 对用户详情等高频访问数据启用 LRU 缓存
  • 设置随机过期时间(±10%)避免缓存集体失效
[客户端] → [API 网关] → [服务层] → [Redis 缓存] ↓ [MySQL 主从集群]
编程语言 Erlang 简介 Erlang是一门为构建并发、分布式、容错系统而生的语言,其Actor模型、监督树和热代码升级等特性至今仍是许多现代系统(如微服务、物联网)设计理念的灵感来源。尽管在某些领域表现不如新兴语言,但在需要高可靠性的场景中,Erlang/OTP依然是不二之选。 阅读详情

相关推荐

分布式压力测试工具Tsung:从架构原理到百万并发实战指南

在软件性能工程领域,压力测试是评估系统在高负载下稳定性和扩展性的关键环节。其核心原理是通过模拟大量并发用户请求,探测系统的性能瓶颈与承载极限。随着微服务与分布式架构的普及,传统的单机压测工具在模拟海量并发时往往遇到资源瓶颈,分布式压力测试技术因此成为解决大规模性能验证需求的关键。分布式压测通过主控节点协调多个负载生成节点,能有效突破单机硬件限制,实现弹性的压力扩展,这对于保障电商大促、即时通讯等高并发场景的服务质量具有重要价值。本文聚焦于基于Erlang/OTP构建的开源分布式多协议压力测试工具Tsung,

weixin_28839629的博客 257

Erlang/OTP gen_server实战指南:构建高可靠并发服务器的5个关键步骤

想要构建能够处理百万级并发连接的系统吗?Erlang/OTP的gen_server行为模式正是你需要的解决方案。作为Erlang/OTP平台的核心组件,gen_server为开发者提供了一个标准化框架,用于创建可靠、可扩展的服务器进程,广泛应用于分布式系统、实时通信和微服务架构。 ## 为什么选择gen_server? 在当今的高并发应用场景中,传统的线程模型往往难以应对大规模并发请求。Erl

gitblog_00130的博客 749

WhatsApp高并发架构解析:Erlang+C+极简协议实现400亿消息日处理

即时通讯(IM)系统是分布式架构的经典实践场景,其核心挑战在于高并发、低延迟与强一致性三者的平衡。底层原理依赖于轻量级进程模型、用户态网络优化与确定性分片路由等关键技术,技术价值体现在将单机百万连接、毫秒级端到端投递、全球状态同步等能力工程化落地。典型应用场景涵盖社交App、企业通信平台及物联网消息中台。本文深入拆解WhatsApp真实生产架构,聚焦Erlang Actor模型的容错优势、C语言零拷贝网络层实现、12字节二进制协议设计,以及三层寻址与客户端状态计算等反直觉但高效的工程决策。

cuanmo8775的博客 417

Cowboy:如何用Erlang构建百万级并发的现代Web服务器?

在微服务和实时应用盛行的今天,开发者们面临着一个共同挑战:如何构建既能处理海量并发连接,又能保持毫秒级响应延迟的Web服务器?传统基于线程池的架构在面对数万并发连接时往往陷入内存膨胀和上下文切换的困境。而Cowboy,这个用Erlang/OTP编写的现代HTTP服务器,提供了一个颠覆性的解决方案。 ## 为什么选择Cowboy而不是传统Web服务器? 大多数Web服务器采用线程池或进程池模型处

gitblog_00337的博客 429

EMQ - 开源的百万级MQTT消息服务器

EMQ(Erlang MQTT Broker)是一个基于Erlang语言开发的开源MQTT消息服务器,具有高性能和可扩展性。本文将详细介绍EMQ的特点和使用方法,并提供相应的示例代码。上述示例代码中,我们首先启动了EMQ的应用程序(emqttd),然后通过插件机制加载了一个自定义插件(emq_example_plugin)。EMQ是一个开源的百万级MQTT消息服务器,具有高性能、可扩展性和安全性等特点。通过以上步骤,我们就成功搭建了一个简单的EMQ MQTT消息服务器,并且扩展了其功能。

XtmData的博客 621

Erlang Mochiweb轻量级Web服务器实战演示

回顾整篇文章,我们从一个简单的spawn出发,深入探讨了Mochiweb如何利用Erlang的轻量进程、消息传递、OTP框架等特性,构建出一套高效、稳定、可扩展的Web服务架构。它的成功并非偶然,而是建立在几十年沉淀下来的并发编程智慧之上。也许你会说:“现在都用Go/Rust了,Erlang是不是过时了?” 我只想反问一句:当你需要真正意义上的软实时、永不中断的服务时,还有比Erlang更适合的选择吗?技术没有绝对的好坏,只有适不适合。而Mochiweb所代表的这种。

weixin_36122351的博客 643

Erlang容错原理与OTP实战:高可用分布式系统基石

Erlang是一种面向高可靠、软实时场景的函数式编程语言,其核心价值在于通过轻量进程、消息传递和OTP行为模式三位一体构建故障隔离与自愈能力。它不追求通用计算性能,而是以确定性语义(不可变数据、无共享内存)消除竞态与状态污染,使单点崩溃不扩散。技术价值体现在电信级九个九可用性保障、热代码升级、百万级进程调度等工程能力上。典型应用场景包括通信网元、物联网设备管理、金融交易路由、实时消息中间件等对SLA极度敏感的分布式系统。本文深入解析Erlang的容错哲学与OTP监督树实践。

weixin_34072296的博客 111

开源即时通讯服务器ejabberd源码深度解析与实战

ejabberd是一款基于Erlang/OTP构建的高可扩展、跨平台即时通讯服务器,广泛应用于企业级IM系统。其核心依赖于开放标准XMPP(Extensible Messaging and Presence Protocol),该协议以XML流为基础,支持实时消息传递、presence状态同步及灵活的扩展机制。XMPP通过JID(如user@domain/resource)唯一标识实体,采用<message/>和<iq/>三种stanza实现通信。

weixin_42596246的博客 1347

Erlang并发模型:轻量进程与消息传递的高可用实践

在分布式系统开发中,并发模型是决定系统可靠性与扩展性的底层基石。主流语言多依赖共享内存与锁机制,易引发死锁、竞态等不确定性问题;而Erlang通过轻量进程、基于消息的通信和错误隔离三大核心机制,构建出可预测、可验证的软实时并发范式。其进程由BEAM虚拟机调度,单机支持百万级实例,内存开销极低,天然规避锁竞争;消息传递采用异步、无锁设计,配合OTP监督树实现故障自动收敛。这种‘用约束换确定性’的思想,正被Akka、Rust Actor等现代框架借鉴。本文深入解析Erlang如何将电信级高可用能力下沉至语言运行

weixin_31528001的博客 60

基于STM32的PID恒温恒湿控制系统 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6核心控制器,完整实现了基于双路PID算法的恒温恒湿闭环控制系统,覆盖高精度温湿度采集、双模式控制、参数在线配置、异常安全保护、掉电记忆等全功能,全程采用无跳步保姆式教学,从硬件选型、接线、CubeMX配置、代码开发、调试排坑全流程拆解,跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 346

OpenClaw实操:给网站装上“智能眼睛”?手把手教你用OpenClaw实时监控网站

本文介绍如何在Windows系统使用OpenClaw构建智能网站监控助手。手把手教你通过配置本地AI模型,让openclaw构建的ai助手自动检测指定网页的内容变化,理解更新重要性,并及时通过邮件、微信、Telegram等渠道发出预警,让你第一时间掌握关键信息,彻底告别手动刷新。

plawuyue的博客 2163

【Erlang并发编程实战宝典】:掌握百万级并发系统的设计秘诀

掌握Erlang并发编程核心技巧,轻松构建高可用、低延迟的百万级并发系统。适用于分布式服务、即时通讯与电信级应用,基于轻量进程与消息传递实现高效容错。深入解析OTP框架与设计模式,实战部署优化方案。值得收藏的Erlang并发编程权威指南。

DebugLoom的博客 258

【外挂编程】外挂编程技术揭秘(二)

引言: 经过上一篇文章大家可能对外挂有了一个初步的认识,之前的内容比较简单,应该大家很容易掌握。我写作过程中我发现三个篇幅可能写不完,后续还可能要多加几个篇幅,这篇我们就先以内存挂为主吧。话不多说了,让我们开始吧。 文章中代码github地址: https://github.com/Diamonds-ZhaoYu/hz_example 环境要求: 系统:Windows 语言...

c-rain 4035

为什么全球顶级IM系统都选择Erlang?深度剖析其分布式优势

掌握高并发IM系统设计精髓,本文深入解析Erlang分布式系统如何实现百万级即时通信。结合电信级可靠性与轻量进程机制,详解其在WhatsApp、WeChat等顶级应用中的实战优势,值得收藏。

VarIsle的博客 785

解锁RK3588+RTL8211F:千兆以太网PHY调优秘籍

本文探讨了RK3588芯片搭配RTL8211F千兆以太网PHY的优化方案。文章首先分析了RK3588和RTL8211F的硬件特性,指出时序问题可能源于时钟信号不稳定、传输延迟和PHY内部逻辑延迟。针对这些问题,提出了选用高质量时钟源、优化PCB布线等时序优化策略,以及合理配置硬件参数、优化网络协议等延迟优化方法。在配置实践部分,详细介绍了硬件连接规范和软件配置步骤,并建议使用Iperf、Ping等工具进行性能测试。最后总结了常见问题解决方案,展望了未来PHY芯片和传输技术的发展趋势。这些优化措施可显著提升网

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 288

电阻抗成像肺功能测试数据分析与直方图生成

本文介绍了基于MATLAB的电阻抗成像(EIT)肺功能测试数据分析方法。研究针对32×32像素的EIT图像序列,通过三步算法处理:首先计算特定时间点与谷值图像的差值,然后分析1秒后峰值与1秒值的差值,最终计算比值矩阵并处理异常值。系统展示了数据预处理、关键时间点检测、比值计算及统计分析的全流程,包括生成概率分布直方图和空间分布图等可视化方法。该分析为无创肺功能评估提供量化指标,可应用于临床呼吸监测和疾病诊断。

huanghm88的专栏 197

【Erlang开发者进阶必备】:2024年最值得投入学习的7个开源项目

掌握Erlang高并发编程精髓,精选2024年最具潜力的Erlang开源项目,涵盖分布式系统、实时通信与容错架构等应用场景。深入解析核心框架设计原理与实战技巧,提升系统稳定性与开发效率,进阶必备,值得收藏。

LogicGap的博客 898

微信电脑版本不会自动下载图片吗?——没有找到解决方法。——只会默认下载doc等文件,图片不行,需要自己另存为——有什么办法解决吗?

微信电脑版本不会自动下载图片吗?——没有找到解决方法。——只会默认下载doc等文件,图片不行,需要自己另存为——有什么办法解决吗?此外,用户还可以选择将接收到的图片、视频和文件保存到指定的文件夹中。‌用户可以在微信设置中调整这一设置。

qq_15963745的博客 5093

EMQ 安装与部署 @a.宏万

     最近接触到了消息队列,发现了一款开源的MQTT服务器,EMQ。 百万级分布式开源物联网MQTT消息服务器 基于高并发的Erlang/OTP语言平台设计,支持百万级连接和分布式集群,发布订阅模式的开源MQTT消息服务器 完整支持MQTT V3.1/V3.1.1协议规范,扩展支持WebSocket、Stomp、CoAP、MQTT-SN或私有TCP协...

aarondella1980的博客 1146

12027.linux flash驱动之IS25LP01G/IS25WWP01G

一页:512字节 --> 扇区 4096字节 --> 块 32k,64k, 层层递进关系。

写给自己的笔记 2290

深度学习在地质勘探中的应用:使用Python构建卷积神经网络进行地震数据分析

在本文中,我们介绍了如何利用深度学习技术,特别是卷积神经网络(CNN),来处理和分析地震数据。我们使用了Python编程语言和TensorFlow框架构建了一个CNN模型,并使用地震数据进行了训练和评估。在本文中,我们将探讨如何利用深度学习技术,特别是卷积神经网络(CNN),来处理和分析地震数据。首先,我们需要获取地震数据集。通过本文的介绍,希望您能对深度学习在地质勘探领域的应用有更深入的了解,并能够应用这些技术来解决实际问题。在准备好地震数据和构建CNN模型后,我们需要将数据分为训练集和测试集。

斌擎科技 1473

Erlang语言的语法

Erlang是一种通用的编程语言,最初由爱立信(Ericsson)在1980年代开发,旨在为电信系统提供高效、稳定的解决方案。Erlang的设计目标主要是为了解决大规模并发、系统容错及实时系统中的问题。其独特的语法和运行时特性使其成为并行编程和分布式系统开发的热门选择。本文将深入探讨Erlang的特点、基本语法、应用领域以及其在现代软件开发中的重要性。

2501_90195523的博客 528

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

消息队列的‘语言基因‘:Erlang与Scala如何塑造RabbitMQ和Kafka的DNA

本文探讨了Erlang与Scala如何作为RabbitMQ和Kafka的'语言基因',深刻影响了两大消息队列的设计哲学与性能表现。Erlang的轻量级进程和OTP框架赋予RabbitMQ高并发处理能力,而Scala的函数式特性与JVM生态使Kafka在大数据场景中表现卓越。文章对比了两者在并发模型、错误处理等关键维度的差异,为分布式系统选型提供技术洞察。

nn3456的博客 56

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

别再用Java做实时通信了!:Erlang低延迟处理的5大技术优势

解决高并发低延迟难题,Erlang在电信应用中表现卓越。基于轻量进程、消息传递、热代码升级等五大技术优势,支撑实时通信系统稳定运行。适用于呼叫控制、即时消息等场景,别再用Java做实时通信了!值得收藏

CodePulse的博客 288

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

1. emqx docker安装以及持久化配置

emqx介绍 EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。 Erlang/OTP是出色的软实时 (Soft-Realtime)、低延时 (Low-Latency)、分布式 (Distributed)的语言平台。 MQTT 是轻量的 (Lightweight)、发布订阅模式 (PubSub) 的物联网消息协议。 EMQ X 设计目标是实现高可靠,并支持承载海量物联网终端的MQTT连接,支

qq_38719011的博客 8238
上一篇: 内存泄漏频发,GC压力山大?,深入剖析Ruby性能瓶颈根源
下一篇: 查询响应从秒级到毫秒级:3步完成SELECT语句深度优化
codetrick
博客等级 码龄17年 151粉丝 1991原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值