如何用GO支撑海外电商的快速发展-吕梦楼如何用GO支撑海外电商的快速发展 吕梦楼 小米科技(武汉)有限公司 海外电商基础服务负责人 目 录 业务背景 01 架构演变 02 场景落地 03 总结 04 Q&A 05 业务背景 第一部分 业务背景 01. 海外电商业务 1 ShareSave 11 Mi.com B2C 23 Community 10 POCO B2C 26 Mi.com B2B 3000W+ 服务全球 4亿 用户 02. 国际小米网 业务背景 23 个国家和地区 服务全球 5000W+ 用户 小米手机用户交流平台 03. 国际小米社区 业务背景 10 个B2C站点 今年新增 6 个站点 全新国际POCO站 04. 国际POCO站 业务背景 05. 面临挑战 架构演变 第二部分 架构演变 01. 海外电商架构 电商 服务 交易服务 交易服务 购物车 下单服务 支付网关 地址服务 BFF 中台 商品中心 营销中心 交易中心 订单中台 库存中心 结算中心 发票中心 基础 Passport 短信网关 邮件服务 SOA Notify/ EMQ MiPush ID生成器 NEO APP-Android APP-IOS PC App ShareSave 商品服务 内容平台 商品详情 商品收藏 产品站0 码力 | 33 页 | 3.80 MB | 1 年前3
微服务容灾治理微服务容灾治理 1. go-zero稳定性能⼒概览 经过这么多年⼤流量服务端架构设计的沉淀,go-zero在保护服务的稳定性上下⾜了功夫,不管是 CPU密集型还是IO密集型服务,go-zero都能很好的保护服务在如下场景不被拖垮或卡死: • 远超服务容量的突发⼤流量 • CPU打满 • 上下游故障或者超时 • MySQL、MongoDB、Redis等中间件故 如图,我们从三个⽅⾯来保护系统的稳定性: • 服务端⾃适应过载保护 • 服务端⾃适应熔断 • 客⼾端⾃适应熔断 当然,我们还有⾃动适配后端服务能⼒的负载均衡算法,对稳定性进⼀步保驾护航。本⽂主要讲解⾃ 适应过载保护的原理、场景和表现。 2. ⾃适应过载保护压测 ⽤过Windows的同学对这个界⾯应该都不陌⽣,这就是典型CPU打满服务不可⽤的表现。此时,我 们⼀般都是⼼⾥默默骂⼀句,然后点左边那个按钮,对吧? ? 那我们想想,如果我们的服务CPU被打满了,是不是后⾯所有的请求也都被卡住了?等服务处理完请 求的时候,⽤⼾那⾥可能已经超时离开了,结果服务器很忙,但都是做的⽆⽤功。如果这⾥不能理 解,停下来好好思考⼀番,如果还不懂的话,可以来go-zero群⾥讨论讨论。。。 2.1模拟CPU密集型服务 有⼈可能会问CPU密集型服务怎么定义?你的服务CPU会打满吗?处理请求会包含复杂的计算逻辑0 码力 | 13 页 | 1.68 MB | 1 年前3
TarsGo微服务开发实践-利开园TarsGo微服务高效开发 最佳实践 利开园 腾讯高级工程师 2021-08-21 关于我 Docker TarsGo Tars+K8S DevOps 2015至今 腾讯 目录 1. RPC 2. 日志 3. 监控 4. 调用链 5. 网关 6. 错误码 7. 配置 8. 云原生 9. 标准化 背景 • Tars是腾讯开源的微服务解决方案 • 高性能的RPC框架 • 丰富的服务治理能力 丰富的服务治理能力 • 支持Golang/Cpp/Java/PHP/Nodejs • 腾讯内部(TAF)曾经应用最广的开发框架 • Tars应用实践:https://github.com/tarscloud/gopractice RPC:不应该只是RPC • 基本功能:远程函数调用 • 可观测 • 名字服务+SET流量管理 • 熔断与恢复 • 轮询/一致性Hash • 错误码管理 日志:排查问题的利器 日志:排查问题的利器 • 格式化 =〉 JSON • 单机withFields • 基于context • 跨服务withFields • 基于透传元数据 • 按大小/时间滚动 • 远程日志 vs 本地日志 的取舍 监控:主动发现问题 • RPC接口默认监控 • 自定义业务监控 • 基于Prometheus Tracing:在复杂系统中定位问题 • 依赖框架Context透传 • 基于OpenTracing+Jaeger0 码力 | 15 页 | 4.23 MB | 1 年前3
基于Go的大数据平台-党合萱基于Go的⼤大数据平台 七⽜牛云—党合萱 什什么是Pandora 简单 · 可信赖 Pandora架构图 Export Service API / Portal / 消息 消息 计算 计算 消息 导出任务 导出任务 导出任务 导出任务 导出任务 计算 消息 对象存储服务 HTTP MongoDB 时序数据库 ⽇日志检索服务 XSpark Report Studio 简单 · 可信赖 内容提要 • 系统设计分析与架构 • 多种上下游适配 • ⾼高吞吐/低延迟问题探究 • ⾼高可⽤用与⽔水平扩展 • ⾃自动化运维 • Go的应⽤用 简单 · 可信赖 系统设计分析与架构 构建系统的挑战 export service系统全貌 可信赖 ⾃自动化运维 简单 · 可信赖 监控⽅方案 • logkit:七⽜牛pandora团队开发的纯go语⾔言数据收集、推 送⼯工具,⽀支持多种数据源,⾼高效易易⽤用 • 时序数据库(TSDB):兼容influxdb,适配grafana 简单 · 可信赖 系统热点⾃自动感知与调整 • ⼀一⽅方⾯面依靠⽇日志对服务做审计、趋势预测,宏观上预知 热点所在 • 另⼀一⽅方⾯面依靠服务⾃自身的状态反馈实时微调,修正宏观0 码力 | 34 页 | 1.26 MB | 1 年前3
2.3 用golang写一个操作系统⽤用Golang ⾃自我介绍 l 开发过银⾏行设备 l 同花顺移动证券 l 前后参与创⽴立过多家公司 l ⽤用Golang写了⼀一个云操作系统 电⼒力、⽯石化、银⾏行、证券、⼲⼴广电、电商 研发、产品、运营、公司运营 l 多种职业 l 喜欢各种宗教 l 喜欢在虚⽆无中创造⼀一个世界 l 多个⾏行业 ⾃自我介绍 l ⽜牛B的作者 功能 模拟ssh登录各server, 采集所有请求的数据 根据服务器、⽇日期、请求,显⽰示所选请求的性能⾛走势图,包括平均和最⼤大响应时间。 选定时期,显⽰示这⼀一天所有请求的请求数⺫⽬目,平均响应时间中,最⼤大响应时间。 可以根据请求数、平均响应时间,最⼤大响应时间对数据时⾏行排序。 代码 1个⽂文件服务器、5个webapi、6个goroutine 部署简单,可以同时在windows和linux上运⾏行 ios、android l 云操作系统 chrome os和阿⾥里云os。在上⼀一层操作系统基础之上和⾃自家的云系统进⾏行整合 l 去中⼼心化的云操作系统 Leither 架构基本和chrome os类似,只是将后端的云系统去中⼼心化,使之脱离巨头的控制 操作系统历史 l 互联⺴⽹网正在整合各个⾏行业,对各个传统⾏行业进⾏行重构 l 互联⺴⽹网的格局正在固化0 码力 | 33 页 | 1014.12 KB | 1 年前3
1.3 七牛如何做HTTP服务测试七牛如何做 HTTP服务测试? 许式伟 2015-4-18 HTTP服务测试 • 单元测试 – 某个独立子服务的测试 • 集成测试 – 整个集群对外业务API的测试 • Stage环境 • Product环境 怎么测? • 七牛早期做法 – 实现服务逻辑(Service Implementation) Case) • 问题 – 客户端SDK修改导致测试案例编不过 – 客户端SDK通常是使用方友好,而不是测试方友好 – 让服务端与客户端SDK耦合,容易过早陷入客户端SDK如何抽象 更合理的细节,而不能专注于测试服务逻辑本身 换个角度 • 直接基于协议测试呢? – 比如,基于 http.Client 类直接写测试案例 • 问题 测试环境 • 如何让 stage 和 product 环境共享测试案例? – 测试环境参数化 – 也方便测试脚本入库(不入库 User/Password、AK/SK 这种敏感 信息) host 指令 • 服务地址参数化 host foo.com 127.0.0.1:8888 get http://foo0 码力 | 27 页 | 422.11 KB | 1 年前3
2.2.5 Go 如何助力企业进行微服务转型如何助⼒企业进⾏微服务转型 万俊峰Kevin About me • go-zero 作者 • 好未来技术委员会资深专家 • GopherChina ⾦牌讲师 • ArchSummit 明星讲师 • 腾讯云开发者⼤会讲师 Agenda • 为什么选 Go? • 单体和微服务怎么选? • 单体到微服务何时转? • 单体到微服务怎么转? 为什么选 Go? • 节省服务成本 • 开发效率 单体和微服务怎么选? 单体的优点 • 开发简单 • 测试简单 • 部署简单 • 扩展简单 单体的缺点 • 难以理解和功能扩展 • ⼩改动也得全量更新 • ⼩问题容易触发⼤故障 • 能够⽀撑的业务规模有限 微服务的优点 • 边界清晰的业务拆分 • 易开发、易理解、易维护 • 技术栈可相对独⽴ • 持续集成、持续部署更容易 • 按需对服务进⾏治理 稳定性更容易保障 微服务的缺点 • 增加了系统复杂度 • 数据拆分复杂度 • 难调试、难测试 • 跨服务修改麻烦 • 部署复杂 到底怎么选? • ⾸先看业务 • 其次看团队 • 从简单⼊⼿ • 预留可能性 单体也有讲究 • 数据梳理清楚很重要 • 快速开发 • 快速交付 • 善⽤⼯具,降低出错 • 不增加成本并为业务发展留下扩展空间 单体到微服务何时转?0 码力 | 25 页 | 4.51 MB | 1 年前3
用Go语言实现推送服务器用Go语言实现推送服务器 陈叶皓 chen.yh@ctrip.com 议程 • 推送服务器介绍 • Golang特点 • 推送服务架构 • 部分代码 • 上线效果 议程 • 推送服务器介绍 • 推送服务架构 • 部分代码 • 上线效果 什么是推送服务器 • 推送业务信息到手机端 • 始终保持连接 推送服务器要求 • 高并发 • 可靠性 • 高性能 • 支持水平扩展 • 无单点故障 无单点故障 Go语言特性 • 静态的、编译的 • 自动内存回收 • 命令式编程 • 函数可以作为值 • 面向并发 • 内置RPC支持 推送服务器要求的应对 • 高并发 – goroutine • 可靠性 – 使用Redis暂存消息 • 高性能 – 静态编译语言 • 支持水平扩展 – 使用RPC组成集群 • 无单点故障 – 使用Redis实现数据共享 Go语言的并发模型 • 事件驱动,共享线程池 个获取返回值的channel 议程 • 推送服务器介绍 • 推送服务架构 • 部分代码 • 上线效果 逻辑架构 去中心化设计 • 客户端随机连接 • Redis集中存储地址表 • 信息发送2跳到达 消息缓存设计 • 消息预存(Redis) • 尝试发送 • 发送成功后删除 客户端注册时序图 议程 • 推送服务器介绍 • 推送服务架构 • 部分代码 • 上线效果 串行场景-Socket0 码力 | 25 页 | 260.04 KB | 1 年前3
1.2 基于 Golang 构建高可扩展的云原生 PaaS 平台基于 Golang 构建⾼可扩展的云原⽣ PaaS 平台 刘浩杨 端点 技术专家 个⼈简介 - 18年加⼊端点,现任微服务和监控团队负责⼈ - 端点开源 PaaS Erda 的核⼼架构师 - 开源爱好者, Apache SkyWalking PMC 成员 ⽬ 录 ⾯向云原⽣的软件交付 01 端点⼀站式 PaaS - Erda 02 Erda 架构的思考 03 模块化开发框架 - 敏捷开发 - 微服务化和容器化 - 交付标准化 - 可观察性 特点: 敏捷的⽬标是提升研发效能 需要⼀个 DevOps 平台来⽀撑敏捷开发的落地 这⾥需要有⼀个标准的交付平台 运⾏环境 业务 数据 业务系统 C 业务 数据 业务系统 A 业务 数据 业务系统 B 资源管理在统⼀平台 应⽤运⾏在统⼀平台 构建标准的交付环境 交付产物标准化 - 业务配置 - 资源配置 实现⼤规模交付的部署过程可被验证 PaaS 平台:资源管理,容器编排,基础监控和告警 APM 监控:应⽤诊断,链路追踪,⽇志分析 微服务治理组件 可靠的业务 贴身护航 基础⽀撑 持续保障系统稳定性 只需很少的运维投⼊即可保证系统稳定性 端点⼀站式 PaaS - Erda 第⼆部分 端点 PaaS 发展历程 有状态服务 Job / JobFlow 批计算 流计算 ⽆状态服务 DaemonSet0 码力 | 40 页 | 8.60 MB | 1 年前3
云原生go-zero微服务框架设计思考云原生go-zero微服务框架设计思考 万俊峰Kevin@好未来 关于我 万俊峰Kevin ● go-zero作者 ● 好未来资深专家 ● 晓黑板研发负责人 ● 十多年研发团队管理经验 ● 近20年开发和架构经验 Agenda ● go-zero之前世今生 ● go-zero是如何设计的 ● go-zero如何高效解决问题 go-zero之前世今生 go-zero的由来 go-zero的由来 ● 单体服务的困局 ● 架构的选型 ● 如何无痛切换 go-zero是什么? ● Web & RPC微服务框架 ● 微服务代码生成工具goctl ● 通用API定义规范 go-zero的设计原则 ● 保持简单,第一原则 ● 弹性设计,面向故障编程 ● 工具大于约定和文档 ● 尽可能约束做一件事只有一种方式 ● 对业务开发友好,封装复杂度 go-zero是如何设计的 客户端 调用鉴权 异常捕获 并发控制 数据统计 监控报警 链路跟踪 自动降载 自动熔断 超时控制 Redis集群 Redis集群 数据库 MySQL集群 MongoDB集群 ClickHouse集群 服务发现 ETCD集群 Redis集群 代码未动,数据先行 ● 定义数据边界 ● 数据库互相隔离,通过RPC访问 ● No join, no pain! 用户 商品 订单 物流 如何设计缓存0 码力 | 29 页 | 5.70 MB | 9 月前3
共 87 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9













