这是一篇我职业生涯总结的 OpenIM 故障排查指南

如果你想在寻找一篇针对 OpenIM 并且准备好具体的问题想来这里找到答案的话。那么很遗憾的告诉你,这篇并不是记录问题和编写答案的,这篇是读者经过开发和业务实战中以 OpenIM 为例总结出来的故障排查的方法,以及调试的技巧。如果你想从我这里学习到故障的排查以及问题定位的经验,那么请你继续读下去。 我将会从工作中经常出现的一些情况总结成类型来分析。 一个小小的玩笑,或许我比较逆人性,其他人都很害怕遇到 bug 的时候,我倒是对出现 bug 比较兴奋,我们后期读代码的时间和维护代码的时间其实是远远高于写代码的时间的。所以面对 bug, 我们的思考和总结尤其是非常重要,尤其是帮我们在写代码的时候也思考,代码的扩展性,和错误处理,是否可以禁得起考验 ~ 故障排查的基本概念 故障排查,我主要是分为几种情况,分别是,编译的故障排查,启动的故障排查,以及服务运行故障排查。这几种情况的故障排查思路都是大同小异的。 首先,我们需要发现问题,然后定位问题。我们可能需要经过多轮分析排查才能定位到问题的根因,最后去解决问题。排障流程如下图所示: 开始 | V 发现问题 ------> 记录问题的症状和相关情况 | V 定位问题 | V 进行初步分析 --------> 确定可能的原因 | | V | 是否需要深入分析?-----> 是 ------> 进行深入分析 | | | | | V | | 确定具体原因 | | | | | V | <-------- 是否已找到根本原因? | | | 否 | V 是否解决了问题? | 是 ------> 记录解决过程和解决方案 | | 否 ------> 调整策略或寻求帮助 | V 结束 如果想排查问题并解决问题,你还需要具备以下两个基本能力:...

April 16, 2024 · 7 分钟 · 1478 字 · 熊鑫伟,我

Sora Ease 指南:开发者掌握 Sora AI 的全面指南

Sora 中文的提示词 | 调教指南。各种场景使用指南。学习怎么让它听你的话。兼顾了 Sora 的多场景应用。 这篇文章来源于 https://github.com/SoraEase/sora-prompt-zh 开源项目,SoraEase 希望为 sora 相关的开发者提供自动化,便捷,快速上手的工具和指南。 Sora | 索拉 是一个AI模型,可以从OpenAI的文本指令中创建逼真和富有想象力的场景。OpenAI正在教AI理解和模拟运动中的物理世界,目标是训练模型,帮助人们解决需要现实世界交互的问题。 如果你是 sora 的学习者,希望获取到 sora 的最新的咨询和相关的开发项目,以及 sora 相关的开源项目,这里 awesome-sora 提供了 sora 相关的Sora 中文指南,指令指南,应用开发指南,精选资源清单,Sora 开发者精选工具框架。 索拉可提供以下功能: 文本到视频 动画 扩展生成的视频 视频到视频编辑 连接视频 图像生成(文本到图像) 在这个存储库中,你会发现各种可以和索拉一起使用的提示。我们根据视频的风格分配了不同的标签,让你可以根据标签快速找到提示示例(Prompt)和生成的视频,并根据需要进行修改。 虽然索拉尚未正式发布,但我们正在全面收集提示,以帮助你快速开始使用索拉生成你想要的视频。 提示词 官方提示词生成器 视频生成提示 官方视频生成提示 一位时尚女性穿着一件黑色皮夹克,一条长长的红色裙子和黑色靴子,手拿一个黑色的手提包,在热闹的东京街道上行走。周围充满了温暖的霓虹灯和动态的城市标识。她戴着太阳镜和红色口红,自信而随意地行走。街道潮湿而反光,形成了五彩灯光的镜面效果。许多行人在周围走动。 生成视频链接 几只巨大的长毛猛犸象漫步在积雪覆盖的草地上,它们的长毛在微风中轻轻飘动,远处是积雪覆盖的树木和戏剧性的雪山,午后的光线和稀薄的云彩以及高高悬挂的太阳形成了温暖的光芒。低角度的摄像视角令人惊叹,捕捉到了这些大型毛茸茸的哺乳动物和美丽的摄影,景深感非常强烈。 生成视频链接 一个电影预告片,讲述了一位30岁的太空人的冒险故事,他戴着一顶红色的羊毛编织头盔,蓝天,盐沙漠,电影风格,35mm胶片拍摄,色彩生动。 生成视频链接 无人机俯视着波涛汹涌的大苏尔加雷角海滩的崎岖悬崖。蓝色的海水拍打着,形成了白色的波浪,而夕阳的金光照亮了岩石海岸。远处有一座灯塔的小岛,悬崖边覆盖着绿色的灌木。从道路到海滩的陡峭下滑是一个戏剧性的壮举,悬崖边突出在海面上。这是一个捕捉到海岸的原始美和太平洋海岸公路崎岖风景的景色。 生成视频链接 动画场景展示了一个近距离的短毛怪兽跪在一个正在融化的红色蜡烛旁边。艺术风格是3D和逼真的,重点放在光线和纹理上。画面的情绪是惊奇和好奇,怪兽睁着大眼睛,张着大嘴盯着火焰看。它的姿势和表情传达出一种天真和俏皮的感觉,好像它是第一次探索周围的世界一样。温暖色调和戏剧性的光线进一步增强了图像的舒适氛围。 生成视频链接 一个华丽的纸艺世界,一个丰富多彩的珊瑚礁,到处都是色彩缤纷的鱼类和海洋生物。 生成视频链接 这个特写镜头展示了维多利亚皇冠鸽子引人注目的蓝色羽毛和红色胸膛。它的羽冠由精致的蕾丝羽毛制成,而它的眼睛是醒目的红色。鸟的头微微倾斜,给人一种威严和威严的印象。背景模糊,突出了鸟的引人注目的外观。...

March 14, 2024 · 2 分钟 · 250 字 · 熊鑫伟,我

Sora 技术讨论以及普通人和开发者如何利用 Sora 改变世界

Sora !!! 近日,互联网上掀起了一阵关于Sora的热潮。作为OpenAI最新推出的技术,Sora赋予了文字生成视频的魔力,其展示的效果令人印象深刻。 在当前,短视频的吸引力已远超过传统的小说和图像漫画。因此,Sora的问世,可能会在视频制作领域引发一场革命。 Sora的魅力在于,它能够基于文本描述生成长达60秒的视频内容,这些内容包括了精细的场景设置、栩栩如生的角色表情,以及流畅的镜头转换。 这项技术能够塑造出多元化的角色,实现特定的动作,并且在主题和背景方面做到与描述高度一致。Sora不仅准确地理解用户的指令,还能深刻洞察这些元素在现实世界中应有的呈现方式。 Sora展现了对语言的深刻洞察力,能够精确捕捉用户的意图,创造出既生动又情感充沛的视频内容。它甚至能在同一视频中呈现多个场景,同时保证角色的连贯性和视觉风格的统一。 然而,Sora并非完美无瑕。在模拟复杂场景下的物理效应,以及理解特定因果关系方面,它仍有待提升。例如,视频中的角色可能会咬一口饼干,却未能在饼干上留下明显的痕迹。 此外,Sora在处理空间细节,如分辨方向,或是描述一段时间内的具体事件,如摄影机的移动轨迹时,也可能显示出一定的局限性。 简单来说,简单来说,Sora 是一种能用文本生成最长 60 秒视频的技术,也可以用来生成图片,因为图片本质上是一帧的视频。 这篇文章,将会从 Sora 的架构,然后到 Sora 的生态,以及最后普通人或者开发者如何利用或者使用 Sora ,为这个 AI 浪潮做准备 ~ Sora的架构与创新 Sora代表了在AI视频生成技术中的一次重大创新,它在架构上与之前的Runway及Stable Diffusion等基于扩散模型的系统有着明显的区别。核心之处在于Sora采用了Diffusion Transformer模型,这是一个结合了扩散模型和Transformer模型的先进架构,为视频生成带来了前所未有的灵活性和质量提升。 架构比较 Runway/Stable Diffusion:这些系统基于扩散模型,通过逐步向图片添加噪点,再逐步去除噪点的方式生成清晰图片。这一过程虽然能够生成高质量的图像,但在视频生成上存在限制,尤其是在处理长视频和维持视频一致性方面。 Sora:Sora利用Diffusion Transformer模型,通过Transformer的编码器-解码器架构处理含噪点的输入图像,并预测出更清晰的图像版本。这不仅提高了图像处理的效率,而且在视频生成上实现了显著的进步。Sora的创新在于它处理的基本单位不是文本的Token,而是视频的“Patch”,即随时间变化的色块,这允许Sora处理任何大小和长宽比的视频,无需预先裁剪或调整。 创新应用 Sora的架构使其能够在训练时使用更多的数据和计算资源,得到更高质量的输出。这种方法不仅避免了视频预处理可能导致的原始构图丢失问题,而且因为能够接收任何视频作为训练输入,Sora的输出不会受到训练输入构图不良的影响。此外,Sora展示了模拟复杂物理现象(如液体动力学)的能力,这得益于其在训练时使用的大量视频数据中包含的物理规则。 研究基础与启示 Sora的开发受到了《Scalable Diffusion Models with Transformers》和《Patch n' Pack: NaViT, a Vision Transformer for any Aspect Ratio and Resolution》两篇论文的启发,这些研究来自Google,并在Sora项目启动后不久发表。这些研究提供了Sora架构的理论基础和技术细节,为Sora及未来AI视频生成技术的发展奠定了坚实的基础。 通过结合扩散模型和Transformer模型,Sora不仅在技术上实现了突破,而且为视频制作和AI应用开辟了新的可能性,预示着AI在影视制作、内容创作等领域的未来将更加广阔和深入。 Sora 和之前的 AI 视频生成工具有什么升级 Sora在AI视频生成领域的出现,标志着技术进步的一个重要里程碑。与早期的AI视频生成工具相比,Sora引入了一系列创新和升级,这些改进不仅提高了视频的生成质量,而且极大地扩展了视频创作的可能性。以下是Sora与之前AI视频生成工具的主要升级和优化: 提升生成视频的质量和稳定性 Sora的技术进步主要体现在能够生成高质量视频的能力上。与之前的工具相比,Sora生成的视频可以达到长达60秒的长度,同时支持镜头切换、确保画面中的人物和背景的稳定性,以及实现高画质输出。这些改进意味着使用Sora生成的视频更加逼真,观看体验更佳,为用户提供了更为丰富和动态的视觉内容。 创新的技术架构:Diffusion Transformer模型 Sora之所以能够实现上述优势,归功于其基于Diffusion Transformer模型的创新技术架构。这一架构融合了扩散模型和Transformer模型的优点,使Sora不仅能够生成文本内容,而且能够预测生成所谓的“时空补丁”。这些时空补丁可以理解为视频中的一个小片段,包含了几帧视频内容。这种方法使得Sora在训练过程中不受视频长度和显卡性能的限制,生成过程更加灵活多样,能够组合不同的时空补丁来创造出新的视频内容。 灵活性和多样性的增强 与基于Diffusion模型的Pika或基于Transformer模型的LLM和ChatGPT等工具相比,Sora的技术架构赋予了它更高的灵活性和多样性。Pika在处理视频内容时受到显卡性能的限制,而且主要模式集中在基于图片关键帧的视频扩展或风格转换上。Sora则通过其独特的模型,能够无需拘泥于特定的视频分辨率或长度限制,创造出更加丰富和多变的视频内容。 Sora 的算力要求 在讨论Sora的使用成本和算力要求之前,我们需要明白AI视频生成技术特别是像Sora这样的先进模型,其成本和算力需求是由多种因素决定的。这些因素包括但不限于模型的复杂度、生成内容的分辨率、视频的长度、以及所需的生成质量。以下是对Sora使用成本和算力要求的一个专业化和详细的分析。...

February 24, 2024 · 2 分钟 · 221 字 · 熊鑫伟,我

Go 源码里的这些 go: 指令 && go 自动化工具

Go 源码里的这些 go: 指令 && go 自动化工具 开发人员有很强的自动化重复性任务的倾向,这也适用于编写代码。 样板代码可能包括设置基本文件结构、初始化变量、定义函数或导入库或模块等操作。 在某些情况下,包提供样板代码作为开发人员构建的起点,通常是在代码行为配置之后生成。 尽管样板代码对于应用程序功能可能是必要的和有价值的,但它也可能是浪费和冗余的。出于这个原因,有许多工具可以最小化样板代码。 go generate 是Go编程语言的命令行工具,允许自动生成代码。您可以使用 go generate 为您的项目生成易于修改的特定代码,使该工具在减少样板文件方面功能强大。 go generate 这个命令通常用于在编译前自动生成代码。它可以用来创建那些重复性高或者模式化的代码,从而节省时间和减少错误。想想看,这在哪些情况下会特别有用呢?🤔 比如说下面有一个简单的例子,在代码中: //go:generate echo Hello, cubxxw ! 在这个例子中,当我们运行 go generate 命令时,它将执行注释中指定的命令。在这个例子里,它会打印出 “Hello, cubxxw !"。 因此,元编程(metaprogramming)的主题是一个开发和研究的热门领域,可以追溯到 1960 年代的 Lisp。元编程中一个特别有用的领域是代码生成(code-generation)。支持宏的语言内置了此功能;其他语言扩展了现有功能以支持这一点。 go:generate 在我们之前的讨论中,我们已经介绍了 “Go Generate” 命令的基础知识。现在,我们将深入探讨一些更具体的用例和实践技巧。🚀 让我们从一些术语开始。go generate 工作方式主要由三个参与者之间协调进行的: Generator:是由 go generate 调用的程序或脚本。在任何给定的项目中,可以调用多个生成器,可以多次调用单个生成器等。 Magic comments:是 .go 文件中以特殊方式格式化的注释,用于指定调用哪个生成器以及如何调用。任何以文本 //go:generate 行开头的注释都是合法的。 go generate : 是 Go 工具,它读取 Go 源文件、查找和解析 magic comments 并运行指定的生成器。 需要强调的是,以上是 Go 为代码生成提供的自动化的全部范围。对于其他任何事情,开发人员可以自由使用适合他们的任何工作流程。例如,go generate 应该始终由开发人员手动运行; 它永远不会自动调用(比如不会作为 go build 的一部分)。此外,由于我们通常使用 Go 将二进制文件发送给用户或执行环境,因此很容易理解 go generate 仅在开发期间运行(可能就在运行 go build 之前);Go 程序的用户不会知道哪部分代码是生成的以及如何生成的。(实际上,很多时候会在生成的文件开头加上注释,这是生成的,请别手动修改。)...

January 25, 2024 · 5 分钟 · 973 字 · 熊鑫伟,我

向量数据库的学习

今天学习 rust ,发现 rust 是非常适合编写数据库的语言,找到了一个宝藏的项目 tikv,它的 github 项目地址是 https://github.com/tikv/tikv,是一个非常活跃的项目,但是我今天的主题是 AI 领域的向量数据库,话不多说,我们马上开始吧。 先决条件 0.1 基础知识介绍:了解向量数据库的基本定义及其与传统数据库的区别。 0.2 数据结构基础:学习向量和其他基本数据结构,如何在数据库中表示和操作这些结构。 0.3 线性代数入门:介绍向量运算,包括向量加法、减法和点乘。 0.4 相似性度量:了解如何计算向量间的相似度,例如余弦相似性。 0.5 数据库索引基础:介绍数据库索引的基本概念,特别是在向量数据库中的应用。 0.6 搜索算法初步:学习基础的搜索算法,理解如何在大型数据集中进行有效的搜索。 0.7 应用案例研究:研究向量数据库在不同领域(如推荐系统、图像识别)中的应用。 主要课程 1.1 向量数据库深入:探索向量数据库的高级特性和优势。 1.2 算法探究:深入了解在向量数据库中使用的关键算法,包括索引和搜索算法。 1.3 数据库设计:学习如何设计和实现一个有效的向量数据库架构。 1.4 集成机器学习:了解如何将向量数据库与机器学习模型集成,以提高性能和功能。 1.5 实际案例分析:通过分析实际案例来加深对向量数据库应用的理解。 1.6 高级数学概念:深入学习相关的高级数学概念,如高维空间的向量表示和操作。 1.7 项目实践:开展一个小型项目,实践向量数据库的设计和应用。 1.8 回顾和评估:复习所学内容,并通过评估来测试理解和应用。 0.1 基础知识介绍 向量数据库是一种特殊类型的数据库,它们使用数学向量来表示和存储数据。这与传统数据库有很大的不同,传统数据库通常使用表格和行来组织数据。 向量数据库的定义 💡 向量数据库是如何工作的? 在向量数据库中,数据以向量的形式进行存储和处理,因此需要将原始的非向量型数据转化为向量表示。数据向量化是指将非向量型的数据转换为向量形式的过程。通过数据向量化,实现了在向量数据库中进行高效的相似性计算和查询。此外,向量数据库使用不同的检索算法来加速向量相似性搜索,如 KD-Tree、 VP-Tree、 LSH 以及 倒排索引 等。在实际应用中,需要根据具体场景进行算法的选择和参数的调优,具体选择哪种算法取决于数据集的特征、数据量和查询需求,以及对搜索准确性和效率的要求。 它们是如何使用向量来存储和处理数据的? 向量数据库使用数学向量来存储和处理数据,这与传统的数据库存储方式有显著不同。这里的关键步骤和概念包括: 数据转换为向量 🔄 在向量数据库中,数据首先被转换为数学向量的形式。例如,文本数据可以通过自然语言处理技术转换为向量,图像数据可以通过深度学习模型转化为向量。 向量表示 📈 每个数据项都被表示为一个向量,这个向量在多维空间中有其特定的位置和方向。这些向量通常在高维空间中,每个维度代表数据的一个特征。 相似性搜索 🔍 向量数据库的一个关键功能是相似性搜索。它通过比较数据项的向量之间的距离(例如,使用余弦相似性)来找到相似的项。这对于处理复杂查询和大数据集特别有效。 索引和检索 📚 向量数据库使用高效的索引机制来快速检索和访问数据。这些索引帮助数据库快速定位查询中涉及的向量,从而加快搜索速度。 机器学习集成 🤖 许多向量数据库可以与机器学习模型紧密集成。这允许数据库不仅存储数据,还可以通过模型直接处理和分析数据,从而提供更高级的数据处理和分析能力。 通过使用向量来表示和处理数据,向量数据库能够处理更复杂、更丰富的数据类型,同时提供更快的搜索和检索性能。这使它们在如今的数据驱动世界中变得越来越重要。...

January 20, 2024 · 5 分钟 · 954 字 · 熊鑫伟,我

OpenIM:构建高效的版本控制和测试工作流程

OpenIM 构建高效的版本控制和测试流程 开源项目的成功与否在很大程度上取决于其质量管理和协作流程。在 OpenIM 开源社区中,项目管理和测试流程的规范性至关重要,以确保代码的质量和稳定性。本文将简要介绍我们的测试方案、分支管理和质量控制策略,以及如何应用于 main 分支、PR 测试分支和稳定的 release 分支,以满足开发者、测试人员和社区管理者的需求。除此之外,还将介绍OpenIM开源社区的规范、测试方案和项目管理策略,旨在提供清晰的指导,以确保项目的稳定性和可持续性。 分支管理与版本控制 对于 OpenIM 来说分支的版本管理策略是尤其重要的,这里面设计到两块,一块是 OpenIM 的部署分支策略,一个是镜像版本策略,这两块分别参考下面的文章: 分支以及 tag 的版本策略 镜像的版本策略 总的来说: 在OpenIM社区中,main 分支被视为稳定版本的代表。所有代码必须经过严格的代码审查和测试,确保其质量和稳定性,然后才能合并到 main 分支中。 release 分支用于发布稳定版本。在 openim-docker 以及 openim-k8s 中使用的镜像版本也都是 release-v3.* 。在 release 分支上的任何更改都应该是针对已知问题的修复或功能的精心策划的添加。测试工作应重点关注于 release 分支,以确保发布版本的可靠性。 测试方案 Main 分支测试 在 main 分支上进行的测试应覆盖核心功能和关键路径,以确保基本功能的稳定性。测试工作应包括单元测试、集成测试和端到端测试。这部分所有的工作全部交给自动化去做,而不需要测试干预。 Release 分支测试 对于三种仓库,分别是 https://github.com/openimsdk/open-im-server 仓库,https://github.com/openimsdk/chat 仓库,https://github.com/openimsdk/openim-sdk-core 仓库。 在 release 分支上进行的测试要求更严格。测试团队应深入测试所有功能,并着重检查先前已知的问题是否已解决。确保在发布前没有潜在的问题。 这里的 PR 合并规则: 以 这个PR 为例: 首先是 PR 标题,PR 标题 fix pageFindUser ,首先,我们知道 git commit 信息包括是三种:...

January 15, 2024 · 2 分钟 · 304 字 · 熊鑫伟,我

AI元年: 2024年的新兴挑战与趋势

2024年1月6日大语言模型分享会 模型的局限: 深度学习 预训练模型 大语言模型 大语言模型的涌现能力: Link: 大语言模型进化之谜:涌现现象的挑战与争议_AI_张俊林_InfoQ精选文章 大语言模型的特点趋势的转变: 大语言比人更懂人类的习惯。 使用 RLHF 训练 使用人类习惯的方式交互 大语言模型的发展脉络: 开源模型越来越多,比例越来越大。 预训练模型依旧是非常多的,但是微调的比例越来越高 如何学习大语言模型 模型结构的配置 大语言模型的微调 使用技巧 自己训练模型 不一定要只是单一的数据,也可以是数据的混合(包括自己提供的业务文档或者代码) 训练的数据来源: 当处理和准备用于机器学习模型训练的数据时,确保数据的质量、安全性、和去重非常重要。这里有一些关键步骤和方法,可以帮助你实现这一目标: 质量过滤(Quality Filtering): 确保数据准确无误:移除或修正任何错误的、不完整的或者是不准确的数据。 保证数据的一致性:确保所有的数据遵循同样的格式和标准。 数据去重(Data Deduplication): 识别和移除重复数据:使用算法或者工具来识别完全相同或高度相似的数据项,并将其合并或删除。 对于文本数据,可以使用哈希算法或者基于内容的去重方法。 隐私去除(Privacy Removal): 确保数据中不含有任何个人可识别信息(PII),如姓名、地址、电话号码等。 在某些情况下,可以使用数据脱敏技术,如匿名化或伪匿名化,来保护用户隐私。 分词(Tokenization): 对于文本数据,分词是将连续文本分割成更小单元(如单词、短语或字符)的过程。 分词的方法依赖于特定语言的语法和词汇结构。对于中文,可能需要特定的分词工具,因为中文是一个无空格分隔的语言。 解码器结构 “causal decoder"和"prefix decoder"是两种不同的解码器结构,它们在处理序列数据,尤其是在文本生成任务中扮演着重要角色。下面是这两种解码器的对比: Causal Decoder (因果解码器) 定义和应用: 因果解码器,如在GPT系列模型中所使用的,是一种单向解码器。 它在生成文本时,仅考虑已经生成的或给定的前文(即,它只看到左侧的上下文)。 工作原理: 在处理每个新词时,因果解码器仅使用前面的词作为上下文。 这种模式模拟了人类自然语言的生成方式,即基于已知信息顺序地产生新信息。 用途: 适用于文本生成任务,如故事叙述、自动写作、聊天机器人等。 特点: 保证了生成的文本是连贯的,并且在逻辑上遵循了之前的上下文。 不能回看或考虑未来的词汇或句子结构。 Prefix Decoder (前缀解码器) 定义和应用: 前缀解码器是一种可以同时考虑前文和后文的解码器,类似于BERT中的masked language model(MLM)。 它在处理数据时,可以同时考虑序列中的前缀和后缀信息。 工作原理: 在处理每个词时,前缀解码器使用前面的词和后面的一些占位符或掩码作为上下文。 这种方式使得解码器在生成某个词时,可以考虑到整个序列的结构。 用途: 常用于需要双向上下文理解的任务,如文本填空、句子完善、语言模型训练等。 特点: 能够在生成文本时考虑到更全面的上下文信息。 更适合于理解整个句子或段落的结构和含义。 模型结构的优化 模型结构优化一直以来都是比较fancy的工作,优秀的模型结构设计,可以大大提高模型参数的效率,甚至小模型效果可以超过大模型。本文我们以XLNet、ALBERT、ELECTRA为例进行分析。虽然他们也可以认为是预训练任务优化和模型轻量化方面的工作,但鉴于模型结构创新力度很大,我们还是在模型结构优化这个版块来分析他们。...

January 14, 2024 · 3 分钟 · 574 字 · Xinwei Xiong, Me

对开源商业化的思考 & 全球流量大会(GTC)学习以及总结

引言:深圳福田会展中心的全球视野 2023年12月6日,在深圳福田会展中心,GTC 2023 全球流量大会如火如荼地展开。这场盛会汇集了来自全球的技术精英,共同探索互联网行业的前沿动态和未来发展趋势。身为参与者,我有幸深入这场融合科技与商业的交流盛会,特别是“聚焦开源,扩展出海新领航”这一议题,让我收获颇丰,印象深刻。 大会聚焦于全球化的多元话题,包括出海市场的选择、广告推广策略等,与我此前参加的专注于日本市场出海活动的公司非常相似。然而,这次大会让我首次深入接触开源社区,不仅结识了众多开源界的领袖和布道者,也与许多杰出的开发者交流了心得。通过这些交流,我不仅学习到了许多新知识,还在思想上得到了升华。 在这篇博客中,我将对这次独特的经历进行深入的反思和总结,分享我在开源和全球化交汇中的洞见和学习。 对于 OpenIM 来说,我们现阶段正在全力准备奔向海外市场,希望打开国界,将 OpenIM 好用而且免费的开源核心功能贡献给全世界开发者。 开源项目天生就是分布式协作的,这是一种松散的结构。以 OpenIM 的开发者为例,我们现在有很多贡献者,开发者,虽然社区有双周会,但是还是很难和人或者同事有深层次的交流。 但对于开源商业公司而言,并不能简单的使用这种远程工作模式。在商业公司中,协作会更加的密切,而且对时效性的要求更高,当面沟通更能保证信息传递的完整性,这是远程工作难以替代的。当然,远程工作也有自己的优势,那就是吸引全球的人才。 所以,开源商业公司采用远程协作并没有问题,但一定要保证沟通的足够充分,拉平信息: 要视频沟通,文字只作为最终的记录。视频是沟通过程中信息丢失比较少的方式,是远程工作交流的首选方式。千万不要用文字来讨论非技术问题,这会带来巨大的信息差和误解。 保证沟通的尊重和善意。在开源项目中,大家因为没有雇佣关系,都是无偿做贡献,所以在异步沟通时特别强调尊重和善意;而在商业公司的远程办公时,因为缺少同事之间的沟通、吐槽和心理按摩,就更要注意沟通的尊重。 定期线下见面,增加相互之间的了解和信任。 另外一点,长期的远程协作,对于参与的工程师来说,除了需要很高的自律和自我管理的要求外,也要注意工作和生活的隔离,保持正常的社交活动和运动健身,否则很容易与社会脱节。 之前和 Apache APISIX 的某个小姐姐聊天,她说的一句话感触很深。也有很多适应不了远程工作的同事一一离去,这也是一个适者生存的达尔文法则。 关于 OpenIM 的远程工作,以及企业的文化,强烈推荐阅读下面的博客: Englist Version 中文版本 出海挑战:中国互联网企业的全球化之旅 中国互联网企业在全球化道路上的探索充满挑战与机遇。从初涉海外市场的尝试到在竞争激烈的国际环境中求生存,它们不断在新的市场环境中寻找增长点。这一过程中,企业需要超越传统的商业模式,适应多元文化和不同的市场需求。 首先,来到了第一个话题,为什么要去做海外社区? 和很多的开源社区的布道者和专家沟通交流,然后反思,我深信建立一个活跃的海外社区是开源项目成功的关键。在全球化的今天,开源不仅是关于代码的分享,更是一种文化和思想的交流。通过建立海外社区,我们不仅能将技术带到世界的每个角落,还能促进不同文化背景下的思想碰撞和创新。 人性化地讲,建立海外社区意味着建立更广泛的连接和共鸣。每一位开源贡献者,不论身处何地,都希望他们的声音被听见,他们的贡献被认可。海外社区提供了一个平台,让来自世界各地的开发者能够参与到项目中来,分享他们独特的视角和经验。这种多元化的参与不仅丰富了项目本身,还激发了更多创新的火花。 同时,海外社区的建立也是对开源精神的一种致敬。开源精神强调的是开放、协作和共享,而这些价值观在全球范围内都是通用的。当我们向海外扩展时,我们不仅在分享代码,更在传播这种包容和合作的精神。 此外,对于开源项目而言,海外社区的建立还意味着更广阔的市场和使用场景。不同的地区和文化背景下,用户对技术的需求和应用方式可能截然不同。这些多样性的输入是项目发展不可或缺的,它们有助于项目更全面地成长,更好地服务于全球用户。 我从大一开始接触 Github ,这个成功打开我通往未来的钥匙。 从2020年左右我开始接触开源,觉得开源比业务代码更有意义。因为开源不仅有技术积累,而且能把你学到的东西分享给其他人,一起成长,所以开源对程序员来说是一个双赢的事。 最开始的时候,我通过学习做笔记,分享笔记到 GitHub ,到后面做项目,参与到一些顶级的开源项目中来,然后慢慢的追求精益。整个过程,我很清晰的看到自己的成长。 甚至我的代码,就像 Git 或者 区块链的默克尔树结构,一步步的串起来记录,每当一个时间段,看到以前的 PR ,满满的都是回忆和尴尬 … 同样,我也是一个云原生的爱好者。 在如今这个时代,开源已经成为了一个不可逆的潮流,尤其是在云原生的领域。以微软为例,他们在 Github 上的开源项目贡献位居全球前列,这充分体现了他们对开源的全面拥抱。在云原生时代,如果你不拥抱开源,不利用开源组件去构建和优化你的核心系统,很可能会在激烈的市场竞争中落后。云原生技术的迅猛发展要求企业和开发者必须快速适应新技术和方法论,而开源社区正是这种创新和合作的孵化器。在这个时代,开源不仅仅是技术选择,更是一种必要的战略思维。 开源社区国际化选择:第一站,启航 美国:开源发展的领头羊 美国仍然是全球最大的开发者社区,拥有超过2000万的开发者,过去一年增长了21%。美国的开源社区历史悠久且成熟,是全球开源活动的重要推动者。 亚太地区:快速增长的新星 亚太地区,尤其是印度、日本和新加坡,正经历着显著的开源社区增长。印度的开发者社区增长尤为显著,预计到2027年将超过美国,成为全球最大的开源社区。 非洲:充满潜力的新兴市场 非洲各地区,尤其是尼日利亚、加纳和肯尼亚,也在迅速发展成为技术公司的新兴枢纽。这些地区的开发者数量每年都在显著增长。 南美洲:稳健增长的活跃区域 南美洲的开发者社区,特别是在阿根廷和巴西,也在持续增长,与亚太和非洲的增长速度相仿。 欧洲:稳定增长的成熟市场 欧洲的开源社区虽然增长速度较美国慢,但在西班牙、德国和英国等国家仍保持稳定增长。...

December 7, 2023 · 3 分钟 · 477 字 · 熊鑫伟,我

自动化测试的学习(一)

云原生领域中GitHub开源Go项目的自动化测试实践与策略 介绍 作为 Github 上的 热门项目 OpenIM,如何在云原生时代中创造出价值,这是非常重要的,OpenIM 是一个优质的小团队,我们在自动化中并没有特别深入的见解。 使用 GitHub Actions 进行持续集成和持续交付 (CI/CD): GitHub Actions 提供了一个平台,可以自动构建和测试 Go 语言项目。通过配置 GitHub Actions 工作流,你可以在代码更改时自动运行测试,确保代码的质量和功能。 KubeVela 项目实践: KubeVela 是一个 Go 语言的云原生和开源项目,它展示了如何在云原生环境中组织 CI/CD 过程,包括自动化测试。KubeVela 使用声明性工作流来协调 CI/CD 过程,你可以参考 KubeVela 的 GitHub 仓库来理解和应用这些实践34[5](https://github.com/kubevela/workflow#:~:text=KubeVela Workflow is an open,engine in your own repository)。 云原生测试框架与工具: 在云原生开发中,合约测试(Contract Testing)是一种常见的测试实践,它确保服务间的通信符合预定义的 API 协议。例如,Cloud-Native Toolkit 中使用 Pact 进行合约测试。通过编写和集成测试,你可以验证服务间的通信是否符合预期6。 代码覆盖率检查: 在进行自动化测试时,检查代码覆盖率是一个好的实践。许多测试框架内置了代码覆盖率检查功能,可以配置它们来报告测试的代码覆盖率。例如,使用 SonarQube 工具来读取和报告代码覆盖率信息6。 利用开源工具和框架: 你可以利用开源工具和框架来进行测试,例如使用 Cypress 进行云原生应用的测试[7](https://dev....

October 14, 2023 · 17 分钟 · 3593 字 · 熊鑫伟,我

Kubernetes 控制平面 - 调度器

调度器 kube-scheduler 负责分配调度 Pod 到集群内的节点上,它监听 kube-apiserver,查询还未分配 Node 的 Pod,然后根据调度策略为这些 Pod 分配节点(更新 Pod 的 NodeName 字段)。 调度器需要充分考虑诸多的因素: 公平调度; 资源高效利用; QoS; affinity 和 anti-affinity; 数据本地化(data locality) ; 内部负载干扰(inter-workload interference) ; deadlines。 kube-scheduler 调度分为两个阶段, predicate 和 priority: predicate: 过滤不符合条件的节点; priority:优先级排序,选择优先级最高的节点。. predicate 策略 PodFitsHostPorts:检查是否有 Host Ports 冲突。 PodFitsPorts:同P odFitsHostPorts。 PodFitsResources:检查 Node 的资源是否充足,包括允许的Pod数量、CPU、内存、GPU个数以及其他的OpaqueIntResources。 HostName:检查 pod.Spec.NodeName 是否与候选节点一致。 MatchNodeSelector:检查候选节点的 pod.Spec.NodeSelector 是否匹配 NoVolumeZoneConflict:检查 volume zone 是否冲突。 MatchInterPodAffinity:检查是否匹配 Pod 的亲和性要求。 NoDiskConflict:检查是否存在 Volume 冲突,仅限于 GCE PD、AWS EBS、Ceph RBD以及 iSCSI。 PodToleratesNodeTaints:检查 Pod 是否容忍 Node Taints。 CheckNodeMemoryPressure:检查 Pod 是否可以调度到 MemoryPressure 的节点上。 CheckNodeDiskPressure:检查 Pod 是否可以调度到 DiskPressure 的节点上。 NoVolumeNodeConflict:检查节点是否满足 Pod 所引用的 Volume 的条件。 priority 策略 SelectorSpreadPriority:优先减少节点上属于同一个 Service 或 Replication Controller 的 Pod 数量。 尽量将同一个 rc 下的多个副本分散到不同节点,增加可用性 InterPodAffinityPriority:优先将Pod调度到相同的拓扑上(如同一个节点、Rack、Zone等)。 LeastRequestedPriority:优先调度到请求资源少的节点上。 BalancedResourceAllocation:优先平衡各节点的资源使用。 NodePreferAvoidPodsPriority:alpha....

September 28, 2023 · 4 分钟 · 668 字 · 熊鑫伟,我