liu 发布的文章

以下是一个企业私有云搭建方案:

 

一、需求分析

 

首先明确企业对私有云的需求,包括但不限于:

 

1. 数据存储需求:确定需要存储的数据类型、容量和增长趋势。


2. 计算资源需求:评估所需的 CPU、内存和 GPU 等计算能力。


3. 网络需求:考虑内部网络带宽、连接数以及与外部网络的交互需求。


4. 安全性需求:确保数据的保密性、完整性和可用性。


5. 高可用性需求:保证系统的不间断运行。

 

二、硬件选型

 

1. 服务器:选择高性能、可扩展性强的服务器,可根据需求选择机架式、塔式或刀片服务器。


2. 存储设备:可以采用磁盘阵列、固态硬盘等存储设备,确保数据的可靠性和读写速度。


3. 网络设备:包括交换机、路由器、防火墙等,保证网络的稳定和安全。

 

三、软件选择

 

1. 虚拟化平台:如 VMware、KVM 等,实现物理资源的虚拟化,提高资源利用率。


2. 云管理平台:用于管理和监控私有云资源,提供自动化部署、资源调度等功能。


3. 操作系统:选择适合企业需求的服务器操作系统,如 Windows Server、Linux 等。

 

四、网络架构设计

 

1. 内部网络:采用高速以太网或光纤网络,确保服务器之间的通信速度。


2. 外部网络连接:设置防火墙和 VPN,保证与外部网络的安全连接。


3. 负载均衡:部署负载均衡设备,提高系统的可用性和性能。

 

五、安全策略

 

1. 访问控制:设置用户身份认证和授权机制,限制对私有云资源的访问。


2. 数据加密:对敏感数据进行加密存储和传输。


3. 备份与恢复:定期备份数据,确保在系统故障时能够快速恢复。


4. 安全审计:对系统的访问和操作进行审计,及时发现安全问题。

 

六、部署与测试

 

1. 按照设计方案进行硬件和软件的部署。


2. 进行系统测试,包括性能测试、安全测试和高可用性测试等。


3. 对测试中发现的问题进行修复和优化。

 

七、运维管理

 

1. 建立运维团队,负责私有云的日常管理和维护。


2. 制定运维管理制度,包括监控、故障处理、升级等流程。


3. 定期进行系统优化和升级,以满足企业不断变化的需求。

 

总之,企业私有云搭建需要综合考虑需求分析、硬件选型、软件选择、网络架构设计、安全策略、部署测试和运维管理等方面,以确保私有云的稳定、安全和高效运行。


以下是企业私有云搭建方案的一些补充内容:

 

八、成本控制

 

1. 在硬件采购方面,可以通过批量采购、选择性价比高的产品以及考虑二手设备等方式降低成本。


2. 软件方面,可以选择开源软件或者采用订阅模式,根据实际需求合理控制软件费用。


3. 能源成本也是需要考虑的因素,选择节能型设备和优化服务器的电源管理,以降低能耗。

 

九、用户培训

 

1. 为企业员工提供私有云使用培训,包括如何上传、下载文件,如何申请计算资源等,提高员工的使用效率。


2. 培训内容还应包括安全意识教育,让员工了解如何保护企业数据和遵守安全规定。

 

十、扩展性规划

 

1. 在设计私有云架构时,要充分考虑未来的扩展需求。预留一定的硬件资源和网络带宽,以便在业务增长时能够快速扩展。


2. 软件方面,选择具有良好扩展性的虚拟化平台和云管理平台,能够方便地添加新的服务器和功能模块。

 

十一、与公有云结合

 

1. 企业可以考虑将私有云和公有云结合使用,形成混合云架构。例如,将非敏感数据存储在公有云上,以降低成本;将敏感数据存储在私有云上,确保安全。


2. 混合云架构还可以利用公有云的弹性计算资源,在业务高峰期时快速扩展计算能力。

 

十二、持续优化

 

1. 定期对私有云的性能进行评估,分析资源利用率、响应时间等指标,找出瓶颈并进行优化。


2. 关注技术发展趋势,及时引入新的技术和解决方案,不断提升私有云的性能和功能。

 

通过以上方案的实施,企业可以搭建一个稳定、安全、高效的私有云平台,满足企业的数据存储、计算资源和业务发展需求。


以下是一份包含各类优秀书籍的 1000 本书单示例,但这只是一个宽泛的推荐,你可以根据自己的兴趣和需求进行选择:

 

1. 文学名著类:

- 中国文学:

- 《红楼梦》曹雪芹:中国古典小说的巅峰之作,以贾、史、王、薛四大家族的兴衰为背景,展现了封建社会的人生百态。


- 《三国演义》罗贯中:描绘了三国时期的政治、军事斗争,塑造了众多鲜明的人物形象。


- 《水浒传》施耐庵、罗贯中:讲述了梁山好汉的故事,反映了当时的社会矛盾和人民的反抗精神。


- 《西游记》吴承恩:充满奇幻色彩的长篇小说,讲述了唐僧师徒四人西天取经的经历。


- 《活着》余华:以平实的文字叙述了主人公福贵悲惨的一生,展现了人性的坚韧和生命的意义。


- 《平凡的世界》路遥:描绘了 20 世纪 70 年代到 80 年代中国农村的变迁,刻画了众多平凡人的奋斗历程。


- 《白鹿原》陈忠实:以陕西关中地区白鹿原上白鹿村为缩影,展现了中国近代农村的历史变迁。


- 《围城》钱钟书:以幽默的笔触讽刺了知识分子的生活和人性的弱点。


- 《呼兰河传》萧红:记录了东北小城呼兰河的风土人情以及作者的童年生活。


- 《狂人日记》鲁迅:中国现代文学史上第一篇白话小说,具有深刻的思想内涵和批判精神。


- 外国文学:

- 《百年孤独》加西亚·马尔克斯:拉丁美洲魔幻现实主义文学的代表作,讲述了布恩迪亚家族七代人的传奇故事。


- 《战争与和平》列夫·托尔斯泰:以 19 世纪俄国历史为背景,展现了战争的残酷和人性的美好。


- 《安娜·卡列尼娜》列夫·托尔斯泰:探讨了爱情、婚姻、家庭等主题,塑造了安娜这一经典的女性形象。


- 《巴黎圣母院》维克多·雨果:通过描写巴黎圣母院副主教克洛德和吉普赛女郎埃斯梅拉达的故事,展现了美与丑、善与恶的对比。


- 《悲惨世界》维克多·雨果:描绘了法国社会的广阔画面,展现了人性的光辉和救赎。


- 《傲慢与偏见》简·奥斯汀:以英国乡绅阶层的日常生活为背景,讲述了伊丽莎白和达西之间的爱情故事。


- 《呼啸山庄》艾米莉·勃朗特:充满激情和复仇的爱情悲剧,具有强烈的艺术感染力。


- 《红与黑》司汤达:反映了法国 19 世纪社会的阶级矛盾和个人奋斗。


- 《高老头》巴尔扎克:揭露了资本主义社会金钱的罪恶和人与人之间的冷漠。


- 《简·爱》夏洛蒂·勃朗特:讲述了简·爱自尊自爱、追求平等爱情的故事。


- 《堂吉诃德》塞万提斯:一部反骑士小说的骑士小说,充满了幽默和讽刺。


- 《罪与罚》陀思妥耶夫斯基:探讨了人性的善恶、道德与法律等问题。


- 《卡拉马佐夫兄弟》陀思妥耶夫斯基:深刻揭示了人性的复杂性和宗教哲学问题。


- 《了不起的盖茨比》弗朗西斯·斯科特·菲茨杰拉德:描绘了美国 20 世纪 20 年代的社会风貌和人们的梦想与幻灭。


- 《老人与海》海明威:通过老渔夫桑迪亚哥与大鱼搏斗的故事,展现了人类的勇气和毅力。


- 《麦田里的守望者》J.D.塞林格:反映了青少年的成长困惑和对社会的不满。


- 《小王子》安托万·德·圣-埃克苏佩里:以儿童的视角探讨了人生的真谛和爱的意义。


2. 哲学思想类:

- 《论语》孔子弟子及再传弟子:记录了孔子及其弟子的言行,是儒家思想的经典著作。


- 《老子》老子:道家思想的代表作,阐述了“道”的概念和无为而治的思想。


- 《庄子》庄子:充满哲学思辨和想象力,表达了道家的逍遥自在的思想。


- 《孟子》孟子:儒家经典之一,强调了人性本善和仁政的思想。


- 《荀子》荀子:主张性恶论,强调通过教育和后天的努力来改变人性。


- 《西方哲学史》罗素:系统地介绍了西方哲学的发展历程,是了解西方哲学的重要读物。


- 《理想国》柏拉图:描绘了一个理想的国家制度,探讨了正义、美德等哲学问题。


- 《沉思录》马可·奥勒留:古罗马皇帝的哲学思考,对人生、道德等问题有深刻的见解。


- 《存在与时间》马丁·海德格尔:对存在主义哲学的重要贡献,探讨了存在的本质和人类的存在方式。


- 《纯粹理性批判》伊曼努尔·康德:对人类理性的批判和反思,是哲学史上的经典之作。


- 《查拉图斯特拉如是说》弗里德里希·尼采:表达了尼采的超人哲学和对传统道德的批判。


3. 历史传记类:

- 中国历史:

- 《史记》司马迁:中国第一部纪传体通史,具有极高的史学价值和文学价值。


- 《资治通鉴》司马光:编年体通史巨著,为后人提供了丰富的历史经验和教训。


- 《三国志》陈寿:记录了三国时期的历史,是了解三国历史的重要文献。


- 《汉书》班固:中国第一部纪传体断代史,对西汉历史的研究具有重要意义。


- 《后汉书》范晔:记载了东汉历史的纪传体史书。


- 《明朝那些事儿》当年明月:以通俗易懂的方式讲述了明朝的历史,深受读者喜爱。


- 《万历十五年》黄仁宇:从独特的视角分析了明朝万历年间的历史事件和社会现象。


- 《曾国藩传》萧一山:全面地介绍了曾国藩的一生,对其政治、军事、文化等方面的成就进行了评价。


- 《苏东坡传》林语堂:生动地描绘了苏轼的人生经历和文学成就。


- 《武则天正传》林语堂:对武则天的一生进行了详细的叙述和评价。


- 世界历史:

- 《全球通史》L.S.斯塔夫里阿诺斯:从全球的角度讲述了人类历史的发展,具有广阔的视野。


- 《人类简史》尤瓦尔·赫拉利:融合多学科知识,探讨了人类的演化和发展。


- 《罗马帝国衰亡史》爱德华·吉本:对罗马帝国的兴衰进行了深入的研究和分析。


- 《法国大革命史》托马斯·卡莱尔:详细地记录了法国大革命的过程和影响。


- 《第三帝国的兴亡》威廉·夏伊勒:对纳粹德国的崛起和灭亡进行了全面的描述。


- 《拿破仑传》埃米尔·路德维希:生动地刻画了拿破仑的一生,展现了他的军事才能和政治抱负。


- 《富兰克林自传》本杰明·富兰克林:美国开国元勋的自传,记录了他的成长经历和思想观念。


- 《甘地自传》莫罕达斯·卡拉姆昌德·甘地:讲述了甘地的非暴力抵抗运动和他的人生哲学。


- 《乔布斯传》沃尔特·艾萨克森:记录了苹果公司创始人乔布斯的传奇人生。


- 《爱因斯坦传》沃尔特·艾萨克森:介绍了爱因斯坦的科学成就和人生经历。


4. 科学技术类:

- 《时间简史》斯蒂芬·霍金:介绍了宇宙的起源、黑洞、时间旅行等宇宙学前沿知识。


- 《万物简史》比尔·布莱森:以通俗易懂的方式讲述了科学的发展历程和科学知识。


- 《物种起源》查尔斯·达尔文:提出了生物进化论,对生物学的发展产生了深远的影响。


- 《梦的解析》西格蒙德·弗洛伊德:对人类的梦境进行了深入的分析,是精神分析学的经典著作。


- 《几何原本》欧几里得:古希腊数学的经典著作,对几何学的发展具有重要意义。


- 《自然哲学的数学原理》艾萨克·牛顿:阐述了牛顿力学的基本原理,是物理学的经典著作。


- 《相对论》阿尔伯特·爱因斯坦:包括狭义相对论和广义相对论,改变了人们对时空的认识。


- 《电磁通论》詹姆斯·克拉克·麦克斯韦:系统地阐述了电磁理论,是电磁学的重要著作。


- 《控制论》诺伯特·维纳:对控制论的基本概念和方法进行了阐述,对现代科学技术的发展产生了重要影响。


- 《从一到无穷大》乔治·伽莫夫:介绍了数学、物理学、生物学等领域的知识,具有启发性。


- 《寂静的春天》蕾切尔·卡森:引发了人们对环境保护的关注,是环保运动的经典之作。


5. 社会科学类:

- 《资本论》卡尔·马克思:分析了资本主义的经济制度,揭示了资本主义的本质和发展规律。


- 《国富论》亚当·斯密:奠定了现代经济学的基础,提出了自由市场经济的理论。


- 《社会契约论》让-雅克·卢梭:探讨了国家的起源、政治制度等问题,对现代政治思想产生了重要影响。


- 《乌合之众:大众心理研究》古斯塔夫·勒庞:分析了群体的心理和行为,对社会心理学的发展具有重要意义。


- 《自卑与超越》阿尔弗雷德·阿德勒:探讨了自卑心理的形成和克服方法,以及个体与社会的关系。


- 《枪炮、病菌与钢铁》贾雷德·戴蒙德:从地理环境的角度分析了人类社会的发展差异。


- 《人类行为的经济学分析》加里·贝克尔:将经济学的分析方法应用于人类行为的研究。


- 《新教伦理与资本主义精神》马克斯·韦伯:探讨了宗教信仰与资本主义发展的关系。


- 《疯癫与文明》米歇尔·福柯:对疯癫的历史和文化进行了研究,揭示了权力与知识的关系。


- 《第二性》西蒙娜·德·波伏娃:探讨了女性的地位和性别角色,是女性主义的经典著作。


6. 艺术文学类:

- 《艺术的故事》贡布里希:系统地介绍了艺术的发展历程,是艺术史的经典著作。


- 《美学散步》宗白华:对中国美学的理论和实践进行了深入的探讨。


- 《西方美学史》朱光潜:系统地介绍了西方美学的发展历程。


- 《中国书法史》刘涛:全面地介绍了中国书法的发展历程和不同时期的书法风格。


- 《人间词话》王国维:对中国古代诗词的审美和批评进行了深入的探讨。


- 《文心雕龙》刘勰:中国古代文学理论的经典著作,对文学创作和批评具有重要的指导意义。


- 《莎士比亚全集》威廉·莎士比亚:包括戏剧、诗歌等作品,是英国文学的瑰宝。


- 《托尔斯泰小说全集》列夫·托尔斯泰:收录了托尔斯泰的所有小说作品,展现了他的文学成就。


- 《巴尔扎克小说全集》巴尔扎克:法国现实主义文学的代表作品,反映了社会的种种问题。


- 《鲁迅杂文全集》鲁迅:鲁迅的杂文具有深刻的思想内涵和强烈的批判精神。


7. 励志成长类:

- 《少有人走的路》M·斯科特·派克:帮助人们理解人生的苦难和成长的意义。


- 《了不起的盖茨比》弗朗西斯·斯科特·菲茨杰拉德:通过主人公的经历,鼓励人们追求梦想。


- 《你当像鸟飞往你的山》塔拉·韦斯特弗:讲述了作者通过学习和自我觉醒,摆脱原生家庭束缚的故事。


- 《刻意练习:如何从新手到大师》安德斯·埃里克森、罗伯特·普尔:介绍了刻意练习的方法,帮助人们提高技能。


- 《终身成长》卡罗尔·德韦克:探讨了固定型思维和成长型思维的区别,鼓励人们培养成长型思维。


- 《逆商:我们该如何应对坏事件》保罗·史托兹:介绍了逆商的概念和提高逆商的方法,帮助人们应对挫折。


- 《坚毅:释放激情与坚持的力量》安杰拉·达克沃思:探讨了坚毅的品质对成功的重要性。


- 《自卑与超越》阿尔弗雷德·阿德勒:帮助人们认识自卑心理,通过努力实现自我超越。


- 《影响力》罗伯特·西奥迪尼:介绍了影响他人的方法和技巧,对人际交往和商业活动具有指导意义。


- 《原则》瑞·达利欧:分享了作者的生活和工作原则,对人们的决策和行为具有启发意义。


8. 儿童文学类:

- 《安徒生童话》安徒生:经典的童话作品,充满了幻想和人性的美好。


- 《格林童话》格林兄弟:收录了众多经典的童话故事,如《白雪公主》《灰姑娘》等。


- 《小王子》安托万·德·圣-埃克苏佩里:不仅适合儿童阅读,也深受成年人的喜爱,传达了关于爱和人生的真谛。


- 《夏洛的网》E.B.怀特:讲述了小猪威尔伯和蜘蛛夏洛之间的友谊,充满了温情。


- 《彼得·潘》詹姆斯·马修·巴利:描绘了永远不会长大的彼得·潘和他在永无岛的冒险故事。


- 《绿野仙踪》莱曼·弗兰克·鲍姆:讲述了小女孩多萝西在奥兹国的冒险经历,鼓励人们勇敢面对困难。


- 《爱的教育》亚米契斯:以日记的形式讲述了小学生安利柯的成长故事,充满了爱和教育的意义。


- 《柳林风声》肯尼斯·格雷厄姆:以动物为主角,描绘了英国乡村的生活和自然风光。


- 《秘密花园》弗朗西丝·霍奇森·伯内特:讲述了三个孩子在秘密花园中的成长故事,充满了对生命的热爱和对自然的赞美。


- 《小王子绘本》:以绘本的形式呈现《小王子》的故事,适合儿童阅读。


企业私有云搭建方案通常包括以下几个关键步骤和考虑因素:


1. **需求分析**:明确企业对私有云的需求,包括业务目标、性能需求、存储需求、安全要求等。


2. **技术选型**:选择合适的硬件、虚拟化技术(如VMware、Hyper-V、KVM)、云管理平台(如OpenStack、CloudStack、vSphere)。


3. **架构设计**:设计私有云的架构,包括服务器布局、存储架构、网络设计等。


4. **部署实施**:根据设计的架构部署硬件、安装虚拟化软件和云管理平台。


5. **测试和优化**:进行全面的测试,确保系统性能和稳定性,并根据测试结果进行优化。


6. **安全措施**:实施防火墙、数据加密、访问控制等安全措施。


7. **维护和升级**:定期进行软件更新、硬件维护和性能监控。


8. **成本评估**:评估私有云建设的初始投资和长期运营成本,确保成本效益。


9. **合规性考虑**:确保私有云建设符合行业法规和数据保护要求。


10. **自动化与标准化**:实现自动化操作和标准化流程,提高运维效率。


11. **灾难恢复与备份**:制定灾难恢复计划和数据备份策略,确保业务连续性。


企业在选择私有云搭建方案时,需要根据自身的业务特点、技术能力、资金投入和业务效果等因素进行综合考虑。私有云的建设是一个长期且持续的过程,需要在实践中不断摸索和优化。


人工智能 (AI) 正迅速改变我们的世界,从智能助手到自动驾驶汽车,AI 的应用无处不在。对开发者而言,快速构建功能强大的 AI 应用是一个挑战。LangChain 作为一款流行的 AI 开发框架,虽然因其丰富的预制组件而广受欢迎,但由于其抽象再抽象、封装再封装,灵活性非常低,且框架的学习、理解及复杂业务逻辑调试的成本很高,使其难以大规模应用于企业业务线上部署。随着 AI 领域的快速发展,微软开源的 Semantic Kernel 框架应运而生,其独特的优势和强大功能可能使其成为 LangChain 的强力替代品。

经过笔者亲子踩坑,将在本文探讨 Semantic Kernel 的核心特点和优势,提供快速入门实践指导,并与 LangChain 的局限性进行比较,旨在帮助开发者选择并入门这个企业级 AI 应用开发框架。

1、什么是 Semantic Kernel

Semantic kernel是微软开源的一个轻量级的开源开发套件,它让你可以轻松构建 AI Agent,并将最新的 AI 模型集成到您的 C#、Python 或 Java 代码库中;它提供了一个简单易用的 API,可以连接到各种 AI 服务,例如 OpenAI、Azure OpenAI 和 Hugging Face 等;并且它作为业高效的中间件,能够快速交付企级解决方案。


semantic_kernel


1.1、核心特性:

  • Kernel:依赖管理容器,管理所有运行AI 应用所需的服务(Services)和插件(Plugins)。

  • Agent:提供了构建任何类型的 Agent(ChatBot、Copilot、Autonomous)的能力。

  • AI Service:支持主流 AI 服务 OpenAI、Azure OpenAI 和 Hugging Face 等便捷接入。

  • Plugin:一类工具的集合。可便捷实现复杂功能,包括本地代码插件、OpenAPI接口插件等。

  • Planning:将函数调用作为规划(plan)和执行(execute)任务的主要方式。

  • Persona:通设置 System Prompt 实现设定的,而且实现方式也非常的方便。

插件(Plugin)是 Semantic Kernel 的一大特色

1.2、优势

  1. 企业级:Semantic Kernel 为微软及其他500强公司提供了灵活、模块化的 AI 解决方案。并且可以轻松扩展以支持语音和视频等其他模式;在安全与可观察性方面,该框架具备先进的安全性增强功能,包括遥测支持、钩子和过滤器,确保您可以安全地部署大规模的AI解决方案。

  2. 自动化业务流程:Semantic Kernel 可以将A I Prompts 与现有API结合,自动执行业务操作。它作为中间件,将AI模型的请求转换为函数调用(Function Call),并处理其结果。

  3. 高度可扩展:你可以通过添加现有代码作为插件,利用一系列现成的连接器来集成AI服务。它还使用OpenAPI规范,便于与团队中的其他开发人员共享和扩展。

  4. 多语言支持:兼容 C#、Python 和 Java,适合各种技术背景的开发者。

  5. 面向未来设计:Semantic Kernel 设计前瞻,能够随着技术进步轻松连接最新的AI模型。新模型推出时,可以简单地进行替换,无需重写整个代码库。

2、Semantic Kernel 的核心特性

2.1、Kernel is All You Need

Kernel 是 Semantic Kernel 的核心组件。简单来说,Kernel是一个依赖管理容器,管理那些运行你的 AI 应用所需的所有服务(Services)和插件(Plugins)。你需要将 AI 应用所有依赖的服务和插件提供给Kernel,在必要的时候 AI 应用会自动使用它们。

组件说明
服务包括所需的 AI 服务(OpenAI)和其他服务(例如日志记录、HTTP 服务等),因此可以支持跨所有语言的服务依赖项引入。
插件是一类工具函数的集合,被 AI 服务用来执行,例如,搜索插件可以包含google搜索、bing搜索等工具


kernel


由于 Kernel 管理着所有服务和插件,因此 Semantic Kernel 的每个组件都基于它来驱动你的 AI 应用。这非常的 Amazing,因为意味着你作为开发者,有个统一的地方可以配置来管理和监控你的 AI 应用。 比如,当你从 Kernel 调用一个 Prompt 时,Kernel会做如下事情: 1. 选择最佳的 AI 服务来运行 Prompt。 2. 使用提供的 Prompt 模板构建 Prompt。 3. 将 Prompt 发送到 AI 服务。 4. 接收并解析响应结果。 5. 最后将来自LLM的响应结果返回给你的应用程序

在这整个过程中,你可以在上述任何步骤中间执行诸如日志记录、向用户提供更新等任何操作,因为这整个过程都在一个地方(Kernel)完成,名副其实的 Kernel is All You Need

在 Semantic Kernel 中定义Kernel十分方便:

# Initialize the kernelkernel = Kernel()

2.2、支持任何类型 Agent 构建

Agent 是基于软件的实体,利用 AI 模型为你完成工作。它们被构建用来执行广泛的任务,并根据它们的工作性质有不同的称呼: - ChatBot:一个被构建用来回答问题的 Agent 称为“ChatBot”,因为它提供了聊天的体验,这些Agent通常依托于自己的数据,比如公司的文档。 - Copilot: 一个被构建来协助你完成工作的 Agent 通常被称为“Copilot”。这些 Agent 通过提供建议帮助你完成任务,如编写电子邮件或创建其他办公文档,你可以选择接受或拒绝这些建议。 - Autonomous:一个被构建来处理重复任务的 Agent 通常被称为“Autonomous”。它可以在不需要干预的情况下响应你的请求并执行操作,它是代替你工作,而不是与你一起工作。

Semantic Kernel 提供了构建任何类型的 Agent 的能力,不需要你是 AI 专家。

在 Semantic Kernel 中,一个 Agent 主要由三个核心构建模块组成:插件(Plugin)、规划器(Planner)和角色(Persona)。

build blocks


2.3、轻松接入 AI 服务

AI 服务是指基于大模型等能力提供的一系列服务,比如ChatGPT等。

Semantic Kernel 的主要功能之一是其能够将不同的AI服务(Services)添加到 Kernel 中,包括 OpenAI、Azure OpenAI 和 Hugging Face 等。这使你可以轻松地替换不同的AI服务,以比较它们的性能,并利用最适合你需求的服务。

比如在接入Azure的GPT-4 Chat服务并添加到 Kernel 的代码如下,是不是非常便捷

# Add Azure OpenAI chat completionkernel.add_service(
    AzureChatCompletion(
      deployment_name="your_models_deployment_name",
      api_key="your_api_key",
      base_url="your_base_url",
    ))

在Semantic Kernel中,有目前最主流的 AI 服务的接口。下表是在不同语言上的支持情况。

服务C#PythonJava
Chat completion
Text generation
Embedding generation (Experimental)
Text-to-image (Experimental)
Image-to-text (Experimental)
Text-to-audio (Experimental)
Audio-to-text (Experimental)

2.4、灵活的插件架构

插件(Plugin)是 Semantic Kernel 的一个关键组成部分。如果你已经使用过 ChatGPT 或 Microsoft 365 中的 Copilot 扩展的插件,那么你就已经对它有所了解。通过插件,可以将现有的 API 封装成一个集合,供 AI 应用使用。这使 AI 应用能够执行它原本无法执行的操作。


plugin<br>s


Semantic Kernel 本质上是在利用函数调用(function calling)功能让 LLM 进行规划(planning)并调用 API。通过函数调用,LLM 可以请求(即调用)特定的函数。Semantic Kernel 随后将请求发送给你定义的合适的函数,并将结果返回给 LLM,以便 LLM 生成最终结果。

在企业业务场景中,插件非常有价值,因为它对一组功能进行了封装,还能很好地与依赖注入配合使用。在插件的构造函数中,可以注入执行插件工作所需的服务(例如,数据库连接、HTTP 客户端等),这在其它不支持插件的架构中难以实现的。

Note
在其它框架中,functions 通常称为“tools”或“actions”。 在 Semantic Kernel 中,仍然使用“functions”来称呼,因为从本质上来看依然是定义在代码中的函数。

下图是一个 Writer 插件示例,里面包含了 ShortPoem 和 StoryGen 等 functions,这些 functions 就是其它框架中的“tools”或“actions”


writer_plungin


在 Semantic Kernel 中定义插件主要有两种方式(在快速实践中会进一步举例说明):使用代码定义 functions 或使用 OpenAPI 规范的 API。通过第一种方式你可以在代码库中编写函数的具体功能和细节,可以利用您已有的依赖和服务。通过第二种方式你可以直接接入 OpenAPI 规范的 API 作为插件,这种方式可以十分方便的跨不同的编程语言和平台共享。

2.5、AI 驱动的插件规划

当 AI 应用拥有多个插件时,就需要一种方法让 AI 应用能够自主的选择合适的一个或多个插件来解决问题,这就需要Planning了。

OpenAI 引入了一种让模型使用函数的原生方法:函数调用(function calling),其他 AI 模型如 Gemini、Claude 和 Mistral 也已采用函数调用作为核心能力。由于这个能力的支持,Semantic Kernel 将函数调用作为规划(plan)和执行(execute)任务的主要方式。

那 Semantic kerenl 是如何知道什么时候该调用什么工具、什么时候调用结束的呢。这其实是通过一个反馈循环来实现的,LLM 会根据用户问请求和插件功能的描述,决定当下需要调用的插件以及具体的函数和参数,Semantic Kernel 会将函数执行结果反馈给 LLM,由 LLM 决定下一步是继续调用插件还是直接回复。

以下就是 Semantic Kernel 基于插件的 AI 驱动的规划过程: 1. 为每个函数创建一个 JSON 格式的函数描述 2. 为 LLM 提供聊天历史记录和上述函数描述 3. 分析 LLM 的响应结果,确定它是回复消息还是调用函数 4. 如果 LLM 想要调用函数,则需要分析 LLM 响应结果中的函数名称和参数 5. 使用正确的参数调用函数 6. 返回函数的结果给 LLM,以便决定它接下来应执行的操作 7. 重复步骤 2-6,直到 LLM 已完成任务

整个反馈循环的过程全部由 Semantic Kernel 支持。规划(planning)什么时候调用调用哪个函数则完全由 LLM 决定,包括函数调用出错 Semantic Kernel 都做了很好的处理,我们只需要定义好插件即可。

2.6、必不可少角色

角色(Persona)通常称为“元提示(Meta Prompt)”或“指令(Instruction)”,用于定义 AI 应用的响应方式或风格。 通过角色的设定,你可以定义 Agent 规划任务、生成回复以及与用户交互的方式和风格。

在Semantic Kernel中,经常将这些 Prompt 描述为“角色”,主要是通设置 System Prompt 实现设定的,而且实现方式也非常的方便。

chat_history = ChatHistory()chat_history.add_system_message("""    You are a technical support specialist for a software company.    Your primary task is to assist users with technical issues,    such as installation problems, software bugs, and feature    inquiries. Use technical jargon appropriately, but ensure that    explanations are easy to understand. If a problem is too complex,    suggest advanced troubleshooting steps or escalate to a higher-level    support team using the escalate tool.""")

定义有效的角色需要仔细考虑 Agent 的目标受众以及 Agent 即将执行的具体任务。以下是一些角色定义的实践建议:

步骤描述
明确目标在创建角色之前,清晰地定义 Agent 需要达成的目标。这包括了解 Agent 将执行的任务以及你期望它与用户的交互方式和风格。
提供示例和场景为了帮助 Agent 更好地理解其角色,提供展示角色行动的示例和场景,比如示例对话、用户故事等,展示 Agent 在不同情况下是如何响应的。
提供备用方案指导 Agent 在遇到未知情况或无法提供回答时应该怎么做。比如包括寻求用户帮助、提供替代解决方案、或直接说明没有明确答案等。
迭代和优化角色设定不是固定不变的,根据用户的反馈和评估情况不断的优化和调整角色设定。

3、放弃LangChain

3.1、LangChain的优缺点

  • LangChain 的优点:

  • LangChain提供了一系列丰富的组件和工具,初期被认为是一个带来便利的产品。

  • 易于集成,使得开发人员理论上能快速地从想法转变为可运行的代码。

  • 在早期阶段,LangChain适合原型制作,可以快速实现对LLM(Large Language Models)的调用和利用。

  • LangChain的缺点:

  • 不灵活性:随着使用需求的复杂化,LangChain的不灵活性显露出来,导致其变成生产力的阻碍而不是源泉。

  • 高度抽象:LangChain的高度抽象使代码难以理解和维护,增加了项目的认知负荷。

  • 抽象层叠:LangChain在其他高级抽象之上叠加了更多的抽象,这增加了调试和理解代码的难度。

  • 框架缺乏灵活性:LangChain的框架设计很难适应快速变化的人工智能和LLM领域,导致难以融入新的概念和想法。

  • 缺乏透明度:由于LangChain的许多底层细节被抽象化,导致技术团队无法轻松编写或调整底层代码。

3.2、选择 Semantic Kernel 放弃 Langchain 的理由

  1. Langchain充满抽象概念,不易于学习和理解。

  2. Langchain不够灵活,对复杂业务逻辑的调试成本高,难以大规模企业线上部署。

  3. Semantic Kernel作为一个轻量级开发套件,为企业提供了更加灵活、模块化的解决方案。

  4. Semantic Kernel兼容多种编程语言,并提供了强大的服务和插件管理,有利于企业标准化和规范化AI应用开发。

  5. Semantic Kernel面向未来设计,易于连接最新的AI模型,并且支持新模型的无缝替换

以下是一个关于 Langchain 与 Semantic Kernel 的直观比较:

特性/框架LangchainSemantic Kernel
设计理念高度抽象与封装高度模块化与灵活性
插件架构抽象概念多,使得代码复杂灵活、易于集成现有API和服务
系统化配置和管理复杂多样,让人一头雾水唯一核心组件Kernel提供所有系统化配置和管理
灵活性不灵活,与快速变化的AI场景不够协同面向未来设计,易于适应新技术
学习成本抽象层次多,学习成本较高设计直观,初学者门槛低
编程语言支持不包含详情支持C#、Python和Java
企业适用性适用性有限,复杂业务调试困难专为企业设计,强调模块化和灵活性

微软推出的开源 Semantic Kernel 是一款强大的 AI SDK,携企业级实力和未来洞察,开创智能应用构建新方案。其自动化、模块化设计预示着AI开发的新风向。对替换 LangChain 而言,Semantic Kernel 绝对是理想的选择。

4、Semantic Kernel 快速实践

4.1、接入 ChatGPT 试试

接入 LLM 是进行一系列 Agent 开发的最基本能力,因此我们先接入一个 Azure 提供的 GPT 服务试试,参考Getting Started以及文档,实践了下 LLM 的非流式和流式接入。

import osimport sys## 因为是使用的.env对LLM进行的配置,所以需要指明.env路径,具体参考Getting Startednotebook_dir = os.path.abspath("")sys.path.append(notebook_dir)# 导入Azure服务和服务配置以及聊天历史类from semantic_kernel.connectors.ai.open_ai import (
    AzureChatCompletion,
    AzureChatPromptExecutionSettings,)from semantic_kernel.contents import ChatHistory# 选择azure服务类型service_id = "azure"# 实例化一个Azure服务azure_chat_service = AzureChatCompletion(
    service_id=service_id,)# 对实例进行相关设置azure_prompt_execution_settings = AzureChatPromptExecutionSettings(
    service_id=service_id,
    max_tokens=150,
    temperature=0.7,
    top_p=1,
    frequency_penalty=0.5,
    presence_penalty=0.5,)# 构造Message,通过ChatHistory高效实现content = "You are an AI assistant that helps people find information."chat = ChatHistory()chat.add_system_message(content)chat.add_user_message("你是谁?")# 非流式调用并输出result = await azure_chat_service.get_chat_message_contents(
    chat_history=chat, 
    settings=azure_prompt_execution_settings)print(str(result[-1]))你好!我是一个人工智能助手,可以帮助你查找信息、解答问题和进行对话。有什么我可以帮助你的吗?# 流式调用和输出stream = azure_chat_service.get_streaming_chat_message_contents(
    chat_history=chat, 
    settings=azure_prompt_execution_settings)async for token in stream:
    print(token[-1], end="")  # end = "" to avoid newlines你好!我是一个人工智能助手,可以帮助你查找信息、解答问题和进行对话。有什么我可以帮助你的吗?

是不是非常的方便和简单。

4.2、定义第一个 Agent

尝试一个简单的灯具控制 Agent

import asynciofrom semantic_kernel import Kernelfrom semantic_kernel.connectors.ai.open_ai import AzureChatCompletionfrom semantic_kernel.connectors.ai.function_call_behavior import FunctionCallBehaviorfrom semantic_kernel.connectors.ai.chat_completion_client_base import ChatCompletionClientBasefrom semantic_kernel.functions.kernel_arguments import KernelArgumentsfrom semantic_kernel.contents.chat_history import ChatHistoryfrom semantic_kernel.connectors.ai.open_ai.prompt_execution_settings.azure_chat_prompt_execution_settings import (
    AzureChatPromptExecutionSettings)from typing import Annotatedfrom semantic_kernel.functions import kernel_function# 定义一个灯具控制的插件(Plugin,一系列工具的集合)# LightsPlugin 包含 get_state 和 change_state 两个 functions,通过@kernel_function装饰器高效实现class LightsPlugin:
    lights = [
        {"id": 1, "name": "Table Lamp", "is_on": False},
        {"id": 2, "name": "Porch lite", "is_on": False},
        {"id": 3, "name": "Chandelier", "is_on": True},
    ]

    @kernel_function(
        name="get_lights",
        description="Gets a list of lights and their current state",
    )
    def get_state(self) -> Annotated[str, "the output is a string"]:
        """Gets a list of lights and their current state."""
        return self.lights

    @kernel_function(
        name="change_state",
        description="Changes the state of the light",
    )
    def change_state(self, id: int, is_on: bool) -> Annotated[str, "the output is a string"]:
        """Changes the state of the light"""
        for light in self.lights:
            if light["id"] == id:
                light["is_on"] = is_on
                return light
        return None# 定义主函数async def main():
    # 初始化Kernel
    kernel = Kernel()

    # 添加Azure OpenAI chat服务,仍然是通过.env配置
    kernel.add_service(AzureChatCompletion(
        env_file_path="./.env"
    ))

    # 如果需要直接诶使用Azure服务,可以通过kernel直接获取,十分方便
    chat_completion: AzureChatCompletion = kernel.get_service(type=ChatCompletionClientBase)

    # 插件添加到kernel
    kernel.add_plugin(
        LightsPlugin(),
        plugin_name="Lights"
    )

    # 配置LLM工具调用的方式,auto自主决定
    execution_settings = AzureChatPromptExecutionSettings(tool_choice="auto")
    execution_settings.function_call_behavior = FunctionCallBehavior.EnableFunctions(auto_invoke=True, filters={})

    history = ChatHistory()

    userInput = None
    while True:
        userInput = input("User > ")
        if userInput == "exit":
            break

        history.add_user_message(userInput)

        result = (await chat_completion.get_chat_message_contents(
            chat_history=history,
            settings=execution_settings,
            kernel=kernel,
            arguments=KernelArguments()
        ))[0]

        print("Assistant > ", result)if __name__ == "__main__":
    asyncio.run(main())User > 有哪些灯?Assistant >  我们有以下几盏灯:1. 台灯 (Table Lamp) - 关闭状态2. 门廊灯 (Porch lite) - 关闭状态3. 吊灯 (Chandelier) - 打开状态User > 把2打开,把3关了Assistant >  操作完成 。2. 门廊灯 (Porch lite) 已打开。3. 吊灯 (Chandelier) 已关闭。User > 完了吗,我看看状态Assistant >  当前灯光状态如下:1. 台灯 (Table Lamp) - 关闭状态2. 门廊灯 (Porch lite) - 打开状态3. 吊灯 (Chandelier) - 关闭状态User >

Reference

[1] learn.microsoft.com/en-

[2] mp.weixin.qq.com/s/ZJTf

[3] github.com/microsoft/se

[4] mp.weixin.qq.com/s/mtaX


大家好,我是白鲸开源的联合创始人代立冬,同时担任 Apache DolphinScheduler 的 PMC chair 和 SeaTunnel 的 PMC。作为 Apache Foundation 的成员和孵化器导师,我积极参与推动多个开源项目的发展,帮助它们通过孵化器成长为 Apache 的顶级项目。

今天的分享的主题其实还是从开源到商业,Apache SeaTunnel 本身就是做数据同步软件,也经历过 Apache 孵化器的孵化,目前已经毕业成为顶级项目,也会跟大家分享一下它的核心特性。包括为什么我们又重新造轮子,那 Doris 和 WhaleTunnel/SeaTunnel 这个多元实时数仓是怎么去解决一些社区用户的问题?另外也给大家分享一下我们社区的 roadmap 和最近的一些进展。

白鲸开源愿景与使命

白鲸开源其实是一家 DataOps 解决方案提供商,目前致力于数据调度和同步领域,简单理解就是大数据的降本增效。我们的目标是通过高效的数据处理解决方案来降低运营成本并提高效率。



当前的重点是改善数据调度和同步的流程,或者是从开发到生产上线整个流程的打通,从而实现从开发到生产的快速过渡。

核心开源项目

我们主要投入于两个 Apache 顶级开源项目:Apache DolphinScheduler 和 Apache SeaTunnel。

DolphinScheduler 是一个分布式工作流调度平台,而 SeaTunnel 则专注于数据集成和同步。

这两个项目在国内影响力也越来越大,在整个大数据生态包括在数据处理和同步方面发挥着关键作用。

数据同步中的挑战

在数据同步领域,我们面临多种挑战,处理众多数据源、版本兼容问题、大数据量带来的数据丢失或重复问题。比如说像 Oracle,它有很多版本,而且每个版本之间是不兼容的,所以你需要去支持它的 CDC,或者是要能够去捕获到它的 DDL 变更这样的场景,每个版本你都要去考虑怎么去适配,这个工作量是很大的。

此外,如何保证数据的精确一致性,以及在出现问题时如何快速回滚?同步过程中需要监控等等,这些都是数据同步中面临的痛点问题。

还有一个痛点的情况,就是当你频繁地去读取 binlog,对数据源的影响会非常大,DBA 会非常关注对数据库源数据库端产生的压力情况,还有大事务 schema 变更会影响到下游,尤其数据量大的这种场景下,大家都会非常关心!

还有离线跟实时同步,通常以前都是需要分开写,这也是面临的问题,就是批是批,流是流,维护会非常的困难。

经常做数据迁移的小伙伴肯定会面临这样痛苦的过程,就是我要做数据迁移通常都是要以月/季的,数据迁移几个月、小半年这样的一个时间,SeaTunnel 的定位其实就是做一个高性能的数据集成工具,希望能够更多的像调度工具和上下游的这些工具去打通,我们也欢迎大家能够去集成 SeaTunnel 去做数据处理的这个事情!



在今年的 6 月,Apache SeaTunnel 正式成为了 Apache 基金会的顶级项目,也是首个国人主导的数据集成项目在 Apache 基金会占了一席之地,它不仅能够应对每天同步万亿级的数据量非常大的场景,包括在海外现在也有一些很典型的案例,像在美国最大的商业银行JPMorgan、印度电信、英国最大的零售商等都应用在了生产的环境中,在国内像哔哩哔哩、唯品会每天同步上千亿的数据,这都是 SeaTunnel 的用户案例。



SeaTunnel 核心功能与目标



简单易用

SeaTunnel 的第一个目标是简单易用。为此,社区最近开源了一个拖拉拽的可视化版本,但距离真正的简单易用可能还有一些距离。同时,它既支持命令行操作,也支持 Web 可视化的操作。

支持多种数据源

目前,SeaTunnel 已经支持 100 多个数据源。这种广泛的兼容性使得它可以适应不同的数据环境。

批流一体

SeaTunnel 还支持批流一体的操作,这意味着不需要为批处理和流处理编写两套不同的代码。这种设计可以大大提高开发效率和代码维护性。

支持整库同步和自动变更

SeaTunnel 可以支持整库同步,同时也支持自动变更,这主要解决了数据切割的问题。全量到增量的无锁自动切换可以大大提高数据处理的效率。

支持读缓冲和动态速率控制

SeaTunnel 可以支持同一个源同步到多个目标,比如从 MySQL 同步到 Hive 或者 Doris。同时,它还支持动态速率的控制,尤其是源数据库端的小伙伴会非常关注这个功能。这种设计可以在保证数据处理效率的同时,防止因速率过快导致的资源浪费或者其他问题。

支持 schema 变更和断点续传

SeaTunnel 可以支持 schema 变更,即数据库结构的变化。同时,它还支持断点续传和精确一致性,这需要上下游数据库的配合才能实现。这种设计可以大大提高数据处理的稳定性和准确性。

支持云组件和精确一致性

SeaTunnel 不仅支持各种云组件,如 RedShift、S3、RDS、DynamoDB 等,还支持像阿里云的 OSS File、TableStore 等。

同时,它可以实现精确一致性,这是通过上下游数据库的配合实现的。这种设计可以大大提高数据处理的可靠性和准确性。

但是像 HDFS 它就做不到这个精确一致。MySQL 这些传统的数据库基本上都是可以做到精确一致

比如说我们要从 MySQL 要去同步到 Doris,或者有些场景可能比如说要从 Mongo 去同步,或者是从 Oracle、MySQL 要去同步到这个像 Doris 的这样的去做 OLAP,去做这个一些实时数仓的一些场景会比较常见一些。比如说它是否能支持双向同步,我也可以支持各种数据源之间的 Source,以及目标端 Sink,这是它的数据去向。

适用场景

SeaTunnel 适用于从各种数据源到各种目标的数据集成和同步场景。它支持双向同步,可以支持各种数据源之间的 Source 以及目标端的 Sink。



以前常见的互联网解决方案,有一些Spark和Flink的场景,那现在你 SeaTunnel 的时候,它会有一个 API,它其实是可以支持跑在 Spark、Flink 上的。它还有一个 Source API,其实是用于扩展各种数据源,我们的目标其实是连接各种数据源,不仅仅是数据库,那还有 SaaS,还有 API 接口,那还有一些本地的文件数据。

此外,它还支持批量、全量、增量的集成,甚至无主键的数据也可以支持。

性能优势

与一些常见的互联网解决方案相比,例如 Airbyte 和 Data X 单机版,SeaTunnel 的性能要快 30 多倍。

我们跟 Data X 的 PK 时候只有单机,一般是 30% - 50% 之间,它的单机做得还可以。但是它没有集群化的版本,也只能做离线的场景。

迭代速度优势

另一个值得称赞的是,SeaTunnel 的版本迭代速度非常快,基本上每个月都会发布一个新的版本。这种快速迭代的速度不仅增加了功能的新颖性和实用性,也提高了整个项目的活力和竞争力。

架构简介

Apache SeaTunnel 的整体架构是无中心化的,类似于 DolphinSchedule 的设计,已经是非常成熟的一个架构了。这种设计可以保证数据从源到目标的流畅传输。



它的核心思想是将任务分解成多个 pipeline,如果某个链条出现问题,用户只需回滚相应的链条,而不是整个作业。这种设计在时间和资源成本上更加节约,同时也提高了性能。

从上图左侧来说它是支持各种源,有 batch、stream、 CDC 的场景,也有这个各种需要去读数据 read data,然后读到 SeaTunnel 这个架构之上,其实就是也有一个 coordinator,是充当了一个 master 的角色,大家把它理解成一个 master,然后 task execution service 其实就是做具体任务的,把它理解成 worker 这样的一个角色,可以这么去理解, master 是负责去分配这任务,然后 worker 是去执行具体的任务,但 worker 执行任务的时候,它其实会分到底是读取的任务,还是做数据转换的任务,还是去写的任务?

而 read task、write task,或是做 convert transform 的 task,这里边其实会有 master,还有 resource manager 去做资源管理以及做 pipeline 设计!

此外,SeaTunnel 使用了动态线程共享技术,避免了资源浪费。以 Spark 为例,启动作业时需要消耗大量的内存,而使用 SeaTunnel 或其商业版 WhaleTunnel,内核可以最大限度地被共享,内核与开源版保持一致。

架构特性

SeaTunnel 支持 Flink 和 Spark,并在近两年设计了一个专为数据同步场景设计的引擎 Zeta。


尽管 Spark 和 Flink 也是为计算而生的,但数据同步的要求与计算有所不同,它更强调性能、稳定性和支持的数据源数量。因此,我们推荐使用 Zeta 引擎。


此外,SeaTunnel 解决了 Spark 和 Flink 等场景中存在的问题。 任务出错时需要回滚整个作业; 可视化开发方面也没有提供完整的解决方案; 对于资源占用过多的场景,一个 task 只能处理一张表,这可能导致资源浪费和影响 DBA 业务场景; 以及对表结构变更、CDC 等场景的不支持。

而 SeaTunnel 正是为了解决这些问题而设计的。

解耦设计

另一个重要的特性是 SeaTunnel 与执行引擎解耦。最早的版本只支持 Spark,但随着 Spark 版本的升级,我们面临着兼容性问题。每个 Connector 都需要为不同的版本重新设计实现,这是一项耗时且繁琐的工作。因此,我们定义了一套 SeaTunnel 自己的 API,与具体的执行引擎解耦。这样,当新的更快、更高性能的数据引擎出现时,我们只需要更新 Connector 即可。



此外,我们还提供了 Source API、Sink API、checkpoint API 和 translation 层等多种 API,通过翻译层将每个卡点翻译成 Flink、Spark、Zata 等不同引擎的底层 API,避免了每个 Connector 都需要适配的问题。同时,也支持流批一体的新 Connector,只需按 API 实现一次即可。

总之,SeaTunnel 的架构和特性使其成为解决数据同步等场景的理想选择。它不仅提供了简单易用的界面和强大的功能,还通过与执行引擎解耦和多种 API 的支持提高了效率和性能。

无中心化设计

前面提到了 SeaTunnel 采用了无中心化的设计,每个 server 都可以充当 master 的角色,也可以充当 worker 的角色。这种设计具有自动选举功能,确保了系统的稳定性和可靠性。



同时,它还支持弹性的伸缩,例如在进行精确处理时,会涉及到 checkpoint 以及分布式快照的创建,以确保数据的完整性和一致性。

这种设计也支持断点续传,对于因异常导致的数据传输中断,可以自动回退到上一个切割方向的点,保证数据传输的连续性和完整性。

性能测试与对比

为了测试 SeaTunnel 的性能,我们进行了一些场景的测试。

从 MySQL 到 Hive,PG 到 Hive,SQL Server 到 Hive 和 Oracle 到 Hive 的场景中,SeaTunnel 的同步速度比 Data X快 30%-50%。



在云同步的场景中,SeaTunnel 的表现更为出色,其性能是 Airbat 的 30 多倍,与 AWS 的数据同步工具 Glue 相比,也快2-5 倍。



我们还对比了 SeaTunnel 与 Data X、Sqoop、Flume 等数据集成工具。这些工具在支持自动建表、整库同步、断点续传、离线增量和 CDC 等方面的能力各有不同。

其中,Data X 社区虽然已经不再维护,但其用户仍然较多。然而,大多数场景中,Data X 并不能提供很好的支持。相比之下,SeaTunnel 在这些方面表现出色。

支持多种数据源



SeaTunnel 支持多种数据源,包括 MySQL、PostgreSQL、Oracle、SQL Server 等。

它还支持将数据同步到 Doris 等数据库。用户可以通过可视化的界面配置数据源信息,而不需要为每个任务都手动配置。




字段映射



状态监控

此外,SeaTunnel 还支持流的导入、MySQL 的 CDC 等特性,并支持多表同步或整库同步等场景。

实时数仓方案

白鲸开源基于 Apache DolphinScheduler 和 Apache SeaTunnel 打造的商业产品 WhaleStudio ,是分布式、云原生并带有强大可视化界面的 DataOps 系统,增加了商业客户所需的企业级特性:


  • 全面支持云原生—云、仓、湖 实时/离线批流一体化任务管控

  • 低代码实现企业大数据的高可用调度和海量数据批量/实时同步

  • 完善的 DataOps 流程可无缝集成代码工具

  • 丰富的数据源对接和传统 ETL 数据组件支持

  • 增强可观测性和操作性,提高运维与任务运行态人工干预能力

  • 复杂时间的管理优化&灵活多样的触发机制&强大的数据科学平台支持

  • 完善的权限控制&审计系统

在 Whalestudio 中,DolphinScheduler 和 SeaTunnel 被视为两个独立的模块,但它们共享一些共同的功能,例如数据源中心的配置只需要进行一次。这种设计使得数据同步和调度更加高效和便捷。



首先,我们需要明白开源并不意味着无限制的免费。在开源世界中,每个项目都有其边界,只有将项目做得非常垂直,才能更好地进行迭代和创新。

因此,我们的开源理念是专注于将项目做得更精细、更垂直,以实现更好的可迭代性。与商业理念不同的是,开源强调的是共享和协作,而商业则更注重整体解决方案和客户的需求。

SeaTunnel 是一个开源项目。在商业版 WhaleStudio 当中,IDE 和可视化配置能力是其中的重要组成部分,它们可以帮助用户轻松地进行 SQL 编写、Python 编程以及业务日期切分等操作。此外,我们还在商业版中提供了一些额外的功能,例如对监管报送等数据的加权处理,以及更丰富的连接器支持。

支持虚拟表

在开源项目中,我们有一个虚拟表的抽象概念。比如说 Kafka、文件这些我们都把它抽象成表,这方便后边去做字段的映射。比如说要去读 Excel 的数据,读到 Doris,或者说其他的数据库,比如说 MySQL,那前面做好了映射,虚拟表建好,后边只是去拖拽一下就 OK 了,不需要再去做这个映射配置这么复杂的事情,我们前阵子跟 SelectDB 做了一个商业的联合解决方案,就是 SelectDB 加上 WhaleTunnel。



在这个场景中,各种产品充当着不同的角色。SelectDB 用于实时数仓,主要处理数据分析和查询。WhaleTunnel 用于数据同步和导入,它可以从各种数据源获取数据并将其导入到目标位置。WhaleScheduler 用于协调和调度这些任务,确保数据在正确的时间被处理。



这些产品共同构成了一个完整的数据同步和集成解决方案,可以轻松地处理各种数据源,并通过调度和同步机制将数据导入到实时数仓中进行分析。这种方案具有高效、灵活和可扩展的优点,可以帮助用户快速实现从开发到生产上线的整个流程。

同时,这个解决方案还提供了一些额外的功能,如调试、IDE 支持和数据工作流的血缘关系分析等,这些功能都是在商业版中提供的。用户可以通过这个方案获得更全面的数据同步、集成和分析能力,从而更好地管理和利用用户的数据资产。

Roadmap

在未来的发展计划中,我们将继续丰富连接器支持,例如增加对 Oracle CDC 和 Mongo DB CDC 的支持。同时,我们也将提供更多可插拔能力,以便用户可以根据自己的需求进行定制。



此外,我们还将与主流的调度系统集成,例如 Apache DolphinScheduler 和 Airflow,以提供更全面的解决方案。

最后,我们还将支持 K8S operator 场景,以帮助用户更好地管理和调度他们的数据工作流。

总之,我们的目标是让中国的开源项目走向世界,让更多的人了解并参与到开源项目中来。

无论您是开源的支持者还是商业化的拥护者,我们都欢迎您加入到我们的大家庭中来。谢谢大家!

本文由 白鲸开源科技 提供发布支持!