1.5 Go 语言构建高并发分布式系统实践## go语言并发编程实践 以360消息推送系统为例 周洋 部门:360手机助手 Weibo: @johntech-o Date: 2015.04.25 ## 目录 go语言在基础服务开发领域的优势? 我遭遇了哪些挑战? 如何应对的? 具有go特色的运维 在高并发,通信交互复杂,重业务逻辑的分布式系统中,Go语言优势体现在:开发体验好、一定量级下服务稳定、性能满足需要 ## 以360消息推送系统为例 以360消息推送系统为例 ## 一 定量级下服务稳定: 50+内部产品,万款开发平台app 实时长连接数亿量级,日独数十亿量级 1分钟内亿量级广播,日下发峰值百亿量级 400台物理机,9个独立集群,国内外近10个IDC 运维管理的go语言编写的常驻service服务实例接近3000个。 ## 业务场景多样: 支持聊天场景业务,稳定支持多款聊天业务app 单通道多app复用 对智能硬件产品,提供定制化消息推送与转发服务 ## 性能满足需要: 线上单机最高160w长连接(24核 E5-2630 @ 2.30GHz 64G内存)qps在2~5w(取决于协议版本,业务逻辑,接入端网络状况) 测试环境,可以通过300w长连接压测(网络,连接稳定,无带宽限制,实际可以更高,决定于广播时候业务内存开销的cpu消耗带来的心跳或者业务延时能否接受)  ## 目录 • 春晚项目,技术挑战 - 整体拆解,架构设计 - 各子系统高可用设计 • Feed信息流:常规到极端 全方位工程实践 ## 春晚,极端并发,技术实力最高级别的检验 • 春晚的力量 • 业界技术难题 现场直播,没有重来的机会 - 不仅仅是摇一摇红包 ✓信息流 + 视频 ✓语音 + 搜索 jpg) ## 春晚项目的技术挑战 • 从 “高并发” 到 “极端并发” • 万一出问题,负面影响不可挽回,需要“万无一失” • 只有短短一个月的准备时间 • 结合AI、推荐、搜索、视频等多项技术,复杂度高 每秒千万级并发 数亿用户参与 208亿次互动 ## 极端并发下的架构设计理念 • 从数万QPS的“高并发”到数千万QPS的“极端并发” √大量的技术沉淀和积累 √针对性的专项设计0 码力 | 28 页 | 58.98 MB | 2 年前3
使用JDBC连接数据库## ☐ ## 使用JDBC连接数据库 北京理工大学计算机学院金旭亮 ## Java数据库应用程序全局视图 Java应用程序 JDBC数据库驱动(*.jar) JDBC规定了一整套访问数据库的标准API,所有数据库都需要实现它,因此,使用JDBC访问数据库的Java应用程序,是很容易切换底层数据库的。 ## JDBC核心类型一览表 |核心类型 (java.sql)|说明| |---|---| 载驱动程序| |Connection|与数据库建立连接| |Statement|在一个给定的连接中执行SQL语句| |PreparedStatement|用于执行预编译的SQL命令| |CallableStatement|用于调用数据库中存储过程| |ResultSet|保存SQL命令的执行结果| 上述组件是独立于底层数据库的,也就是说,只要连接上了数据库,相同的代码,就可以顺利工作..... ## ## JDBC访问数据库的基本步骤 加载JDBC驱动程序 创建数据库连接 执行SQL语句 接收并处理SQL的返回结果 关闭创建的各个对象 对于有可视化界面的应用程序,或者是Server端应用程序,应该在独立的线程中完成这些步骤。 出于精简学习负担的目的,我们将以SQLite为例介绍JDBC的基本使用,在此基础之上,后面选择微软的SQL Server来介绍JDBC的高级特性……  ## Concurrency is not Parallelism Slide (http://talks ents/9/d/7/e/9d7ec6880e87f715ac8d1b4b792dd0b8/p3_1.jpg) 1. 并发很强大 2.并发帮助实现并行,使并行(扩展等)变得容易 3. 并发不是并行,并发重点是架构,并行重点是执行,两者不同,但相关。 ## 可视化 并发(Concurrency) & 并行(Parallelism) 一图胜千言! • 并行(PARALLELISM) html) • 并发(CONCURRENCY) 这是并发 (/2017/go-concurrency-visualize/pingpong36.html) 为什么要关注并发?当今是多核的时代,并发的世界 ## 多核的时代  并发编程并不容易,但0 码力 | 29 页 | 1.48 MB | 2 年前3
1.6 Go并发编程实践 - 晁岳攀Go并发编程实践 晁岳攀 @colobu 微博 http://colobu.com 探探 Gopher China 2019 Agenda 基本同步原语 扩展同步原语 原子操作 Channel 内存模型 ’ alt=‘OCR图片’/> 基本同步原语 ’ alt=‘OCR图片’/> 基本同步原语 Mutex 互斥锁 Mutual exclusion, 任何 } ’ alt=‘OCR图片’/> 基本同步原语 RWMutex 可以被一堆的reader持有,或者被一个writer持有 适合大并发read的场景 零值是未加锁的状态 writer的Lock相对后续的reader的RLock优先级高 禁止递归读锁 ’ alt=‘OCR图片’/> 基本同步原语 RWMutex - 数据结构 type RWMutex struct //多了一次Done wg.Wait() fmt.Println(atomic.LoadInt64(&count)) ’ alt=‘OCR图片’/> 基本同步原语 Waitgroup - Add和Wait并发调用 for i := 0; i < 100; i++ { go func() { for { wg.Add(1)0 码力 | 82 页 | 16.62 MB | 1 月前3
2.1.5 千万级高性能长连接Go服务架构实践GO CN 千万级高性能长连接Go服务架构实践 彭宝江 百度公司 资深研发工程师 统一长连接服务背景 01 统一长连接服务介绍 02 统一长连接服务架构 03 统一长连接golang实践 04 总结和规划 05 01统一长连接服务背景 ’ alt=‘OCR图片’/> 什么是长连接 长连接 长连接 APP生命期常驻 支持全双工上下行 提升实时性、互动性 应用场景:消息&直播&PUSH ’ alt=‘OCR图片’/> 统一长连接服务背景 ’ alt=‘OCR图片’/> 02统一长连接服务介绍 ’ alt=‘OCR图片’/> 支持的业务场景 业务 支持能力 推送场景 推送预计UPS 消息 请求转发下行推送 单播/批量单播 万级 直播 请求转发下行推送 组播 千万级 云控 请求转发下行推送 批量单播 百万级 PUSH 请求转发下行推送 批量单播 百万级 统一长连接-功能目标 服务接入 ’ alt=‘OCR图片’/> 统一长连接-性能目标 性能项 性能支持 说明 并发连接数 千万级长连接 支持横向扩容 下行QPS 百万级批量单播推送千万级组播推送 支持横向扩容 服务延时 毫秒级 - ’ alt=‘OCR图片’/> 统一长连接设计目标 稳定性 少出问题 快速恢复 高性能 高并发 高实时 易用 功能明确 接入便捷0 码力 | 34 页 | 1.24 MB | 1 月前3
全连接神经网络实战. pytorch 版全连接神经网络实战 PYTORCH 版 DEZEMING FAMILY DEZEMING Copyright $ \copyright $ 2021-10-02 Dezeming Family ## Copying prohibited All rights reserved. No part of this publication may be reproduced or transmitted 。本书不可避免要参考 $ ^{[2]} $ 的讲解方式,但我们对讲解顺序和内容,以及程序代码都做了大量的改进。说了那么多,总之,我们的目标是写一个最好的最容易上手的 pytorch 入门教程——从全连接网络开始。 书中的示例代码在网站页面可以找到。每节末尾会提示“本节代码见 chapterX.py”。 20211006:完成本书第一版。 ### 1. 准备章节 1.1 导入 pytorch NeuralNetwork 内部定义函数: def weight_init(self): # 遍历网络的每一层 for m in self.modules(): # 如果该层是线性连接层 if isinstance(m, nn.Linear): print(m.weight.shape) print(m.bias.shape)0 码力 | 29 页 | 1.40 MB | 2 年前3
1-Noah-Chen-连接世界的Python社区0 码力 | 24 页 | 2.98 MB | 2 年前3
MySQL高可用 - 多种方案## MYSQL 高可用方案探究 1 前言.....3 2 Lvs+Keepalived+Mysql 单点写入主主同步高可用方案.....3 2.1 方案简介.....3 2.2 方案架构图.....3 2.3 方案优缺点.....4 2.4 方案实战.....4 2.4.1 适用场景.....4 2.4.2 实战环境介绍.....4 2.4.3 Mysql 的安装和配置 backup 的 realserver 的配置.....7 2.4.9 Master 和 backup 的启动.....8 2.4.10 高可用方案测试.....9 3 Lvs+Keepalived+Mysql 单点写入读负载均衡主主同步高可用方案.....9 3.1 方案简介.....9 3.2 方案架构图.....9 3.3 方案优缺点.....9 3.4 适用场景 11 3.5.7 Master 和 backup 的 realserver 的配置.....15 3.5.8 Master 和 backup 的启动.....16 4 Heartbeat 高可用 Mysql 主主同步方案.....16 4.1 方案简介.....16 4.2 方案优缺点.....16 4.3 方案架构图.....17 4.4 适用场景.....17 40 码力 | 31 页 | 874.28 KB | 1 年前3
Curve元数据节点高可用Curve元数据节点高可用 • 1. 需求 • 2. 技术选型 • 3. etcd clientv3的concurrency介绍 • 3.1 etcd clientV3的concurrency模块构成 • 3.2 Campaign的流程 • 3.2.1 代码流程说明 • 3.2.2 举例说明Campagin流程 • 3.3 Observe的流程 4. MDS使用election模块的功能进行选主 异常 4.2.7 各情况汇总 ### 1. 需求 mds是元数据节点,负责空间分配,集群状态监控,集群节点间的资源均衡等,mds故障可能会导致client端无法写入。 因此,mds需要做高可用。满足多个mds,但同时只有一个mds节点提供服务,称该提供服务的mds节点为主,等待节点为备;主节点的服务挂掉之后,备节点能启动服务,尽量减小服务中断的时间。需要解决的问题就是:如何确定主备节点。 为大家熟知的就是zookeeper和etcd,考虑当前系统中mds有两个外部依赖模块,一是mysql,用于存储集群拓扑的相关信息;二是etcd,用于存储文件的元数据信息。而etcd可以用于实现mds高可用,没必要引入其他组件。 使用etcd实现元数据节点的leader主要依赖于它的两个核心机制:TTL和CAS。TTL(time to live)指的是给一个key设置一个有效期,到期后key0 码力 | 30 页 | 2.42 MB | 1 年前3
共 1000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 100













