《Cloud IDE 在美团从 0 到 1 落地实践-俞超.pdf》由会员分享,可在线阅读,更多相关《Cloud IDE 在美团从 0 到 1 落地实践-俞超.pdf(46页珍藏版)》请在三个皮匠报告上搜索。
1、Cloud IDE 在美团从 0 到 1 落地实践俞超自我介绍闪电侠工具派:IntelliJ IDEA&VIM美团网络长连建设&Netty美团 IDE 相关产品技术负责人云端编程能带来什么云端编程技术本质美团 Cloud IDE 产技运实践开放平台场景化实践云端编程未来畅想大纲大纲云端编程能带来什么?VS云端编程带来什么云端编程带来什么服务器级强劲的性能:服务器级强劲的性能:CPUCPU、内存、内存C+libXyz missingJAVAgccx y conflictcan not found xxxxxx undefinednodeyum installversion must 8.3.8V
2、SVS开发环境我这边可以 workbuild errorxxx configpython3云端编程带来什么云端编程带来什么构建复杂、一致的标准开发环境构建复杂、一致的标准开发环境VSVS云端编程带来什么云端编程带来什么高效协同:结对编程、高效协同:结对编程、CRCR、故障复现、故障复现线上系统本地电脑需求任务分支切换线上告警排查问题test failedbug fix编写代码线上运行心流,心流!pr 冲突解决冲突上下文切换云端编程带来什么云端编程带来什么解决线上与本地割裂的问题解决线上与本地割裂的问题VSVS本机硬盘云盘codecodecodecode云端编程带来什么云端编程带来什么代码安全代
3、码安全云端编程技术本质键鼠事件 计算渲染云端编程技术本质云端编程技术本质Projector服务器服务器2.事件入队3.计算4.指令出队5.渲染指令举例:举例:JetBrainsJetBrains ProjectorProjector1.键鼠事件6.渲染类型类型键鼠事件键鼠事件计算计算渲染渲染VSVS Code/JetBrainsCode/JetBrains IDEIDENativeNativeNativeVSVS CodeCode WebWeb浏览器浏览器+服务器浏览器VSVS CodeCode RemoteRemoteNativeNative+服务器NativeJetBrainsJetBra
4、ins ProjectorProjector浏览器服务器浏览器JetBrainsJetBrains GatewayGatewayNativeNative+服务器Native云端编程技术本质云端编程技术本质美团 Cloud IDE 从 0 到 1 产技运实践MVPMVP独立产品开放平台美团美团 Cloud IDE Cloud IDE 从从 0 0 到到 1 1 产技运实践产技运实践验证云端编程可行性及工程师的接受度一键复制环境浏览器编码MVPMVP 阶段阶段 产品目标产品目标cloudide-webcloudide-servermysqldocker-javaDocker Engineproje
5、ctor-clientprojector-serverIDE物理机镜像一键复制一键复制&浏览器编码浏览器编码 技术架构技术架构containercontainercontainerMVPMVP 阶段阶段 运营推广运营推广MVP独立产品独立产品开放平台美团美团 Cloud IDE Cloud IDE 从从 0 0 到到 1 1 产技运实践产技运实践高性能独享主机,支持构建和分享环境,常态编码资源隔离本地习惯一键构建独立产品阶段独立产品阶段 产品目标产品目标多机房部署,前端路由原生 Docker-K8S 弹性调度无状态设计,EBS 云盘挂载空闲检测,闲置释放,冷启Traefik 网关 websoc
6、ket 路由Docker Commit 构建cloudide-web cloudide-servermysql projector-client K8S API Serverk8s-clientdocker-javaprojector-serverIDE/rootprojector-serverIDE/rootK8spod/rootkubelettraefik 网关EBS镜像仓库 pierdockercontainerDockerEnginedockercontainerdockercontainerwebsocket构建镜像构建镜像mountmountmount资源隔离和一键构建资源隔离和一
7、键构建 技术架构技术架构多机房路由用户地域Project AProject B保持研发本地习惯保持研发本地习惯 单单 PodPod 多项目多项目Project AProject BPodPodPodPod单 Pod 单项目单 Pod 多项目 projector-clientcloudide-web cloudide-serverprojector-serverProject AProject BPlugin Server1./ide/x/project=projectA2.http getProjectIndex3.插件获取插件获取 index4.projectIndex=15.project
8、Index=16.websocket projectIndex=1单单 PodPod 多项目技术原理多项目技术原理Projector 无法感知项目信息项目索引动态变化 问题问题Plugin Server 与 IDE 交互Plugin 拿到项目索引项目索引传递至 projector 解决方案解决方案工作空间,本地习惯,日常工作高性能,资源独享自定义研发环境,复制分发实时分享,一起找 bug独立域名,便于调试独立产品阶段独立产品阶段 产品截图产品截图独立产品阶段独立产品阶段 运营推广运营推广吃狗粮高频迭代发布场景化运营:疫情,电脑卡顿IntelliJ IDEA 全键盘编码分享MVP独立产品开放平台
9、开放平台美团美团 Cloud IDE Cloud IDE 从从 0 0 到到 1 1 产技运实践产技运实践赋能业务自定义镜像关键在于抽象产品能力关键在于抽象产品能力创建 IDE删除 IDE重启 IDEIDE 控制写入文件读取文件切换分支开放平台阶段开放平台阶段 产品目标产品目标前端后端工作空间工作空间管理后台管理创建启动销毁恢复复制空闲检测运行环境JetBrains Projector/GatewayVS Code Web/RemoteIDEACLionGolandPyCharmC/C+JS容器管理K8S 集群容器调度EBS 盘Pier 镜像 开放平台阶段开放平台阶段 分层架构分层架构规模化规
10、模化使用的三个问题使用的三个问题编码不流畅,偶尔卡顿创建和冷启耗过长资源问题Projector-Server容器容器1.键鼠事件2.事件入队3.计算4.指令出队5.渲染指令数据压缩数据压缩渲染指令合并渲染指令合并6.渲染ProjectorProjector 编码流畅度优化编码流畅度优化BeforeBefore:链路长、耗时多、易出错,:链路长、耗时多、易出错,5050 秒秒AfterAfter:预制镜像、:预制镜像、提前调度、写用户数据,提前调度、写用户数据,1 1 秒秒PodPodPodkubleto openpen apiapiK8S API ServerK8S API ServerETC
11、D镜像中心初始化网络初始化网络 sidecarsidecar 容器启动容器启动业务方业务方IDEAIDEA 启动启动打开项目打开项目 MavenMaven 依赖依赖、索引、索引 调度调度 拉取镜像拉取镜像o openpen apiapi业务方业务方 A APod依赖缓存Pod依赖缓存Pod依赖缓存Pod依赖缓存Pod依赖缓存Pod依赖缓存Pod依赖缓存Pod依赖缓存o openpen apiapi业务方业务方 B BA 业务镜像B 业务镜像容器池容器池容器池容器池非持久化形态下的启动优化非持久化形态下的启动优化EBS AEBS B用户用户A A 用户用户 B B存算分离,热挂载实现秒级冷启,存
12、算分离,热挂载实现秒级冷启,5050 秒秒 -3 3 秒秒Pod公共容器池公共容器池热挂载热挂载热挂载热挂载PodPodPodPodPodPodPod/root/rootPodPodPodPodPodPodPodPod/root/root持久化形态下的冷启优化持久化形态下的冷启优化选一个空闲的 Pod热挂载 EBS 到/root 目录重启 IDE 冷启流程冷启流程 直接回收并卸载 EBS调整容器池大小 释放流程释放流程 开放平台阶段开放平台阶段运营推广运营推广接入极简化Demo 用例案例分享建设成果建设成果 周用户数周用户数开放平台场景化实践开放平台场景化实践开放平台场景化实践 XFrameXFrame开放平台场景化实践开放平台场景化实践 函数编程函数编程 NestNest开放平台场景化实践开放平台场景化实践 Code Code 在线解冲突在线解冲突开放平台场景化实践开放平台场景化实践 移动云测移动云测开放平台场景化实践开放平台场景化实践 云调试云调试云端编程未来畅想自适应项目规模,动态调整配置单元测试 or 代码扫描,左移&失败后立即修复需求并行开发,互不干扰测试联调环境,无需担心环境云端编程未来畅想云端编程未来畅想下一秒需要编码时都需要下一秒需要编码时都需要 CloudCloud IDEIDE欢迎交流欢迎交流