为什么基于云的架构和开源并不总是混合在一起
2021-09-07 09:43:02从某些角度来看,开源在云中取得了巨大的成功。像Kubernetes这样的开源解决方案已经吃掉了闭源替代方案。然而,在其他方面,云中的开源已经完全失败了。基于云的架构继续为实现开源保护用户自由的创始目标带来根本性问题。
基于云的架构和开源应该是天作之合,但像Kubernetes这样的成功案例是例外,而不是规则。
从某些角度来看,开源在云中取得了巨大的成功。像Kubernetes这样的开源解决方案已经吃掉了闭源替代方案。然而,在其他方面,云中的开源已经完全失败了。基于云的架构继续为实现开源保护用户自由的创始目标带来根本性问题。对于许多组织而言,使用云意味着将控制权交给专有解决方案提供商并面临严格的锁定风险。
这些观察引出了一个问题:为什么开源在云中没有更大的影响力,以及可以做些什么来使云计算对开源更加友好?
开源的云问题
从云时代的早期开始,开源和云之间就一直存在紧张关系。
当自由和开源软件在1980年代在RichardStallman和GNU项目的支持下首次出现时,主要目标(正如Stallman当时所说)是将软件源代码提供给任何想要它的人,以便用户可以“无耻地使用电脑”,彼此团结一致。
如果您在本地设备上运行软件,访问源代码就可以实现这些目标。它确保您可以研究程序的工作原理,与他人共享修改并自己修复错误。只要源代码可用并且您在自己的设备上运行软件,软件供应商就不能“划分用户并征服他们”。
但是,当软件迁移到基于云的架构时,这种计算方式发生了根本性的变化。在云中,您作为最终用户访问的软件在由其他人控制的设备上运行。即使软件的源代码是可用的(在SaaS平台的情况下通常不是这样,尽管理论上可能是这样),其他人——特别是拥有运行软件的 服务器 的人——可以控制你的数据,决定如何配置软件,决定何时更新软件,等等。最终用户之间没有团结,最终用户和软件提供商之间也没有平等。
Stallman和其他自由软件倡导者很早就意识到了这一点。到2010年,Stallman哀叹用户在使用基于云的软件时放弃了控制,并创造了诸如“服务替代软件”之类的术语来模拟SaaS架构。他们还引入了Affero通用公共许可证,旨在将GNU通用公共许可证(主要的自由软件许可证)的保护扩展到通过网络托管的应用程序。
这些努力的成果充其量只是平庸的。自2000年代中期以来,Stallman恳求用户不要使用SaaS平台并没有阻止云的爆炸性增长。今天,很难想到一个主要的软件平台不能通过SaaS架构使用,也很难找到一个因软件自由问题而回避SaaS的最终用户。
尽管Affero许可证获得了关注,但它在云中推动自由和开源软件事业的能力有限。Affero许可证的主要目的是确保软件供应商不能声称基于云的软件没有“分发”给用户,因此不受传统开源许可证(如GPL)的规定的约束。这总比没有好,但对于解决用户在使用基于云的服务时面临的数据控制、软件修改等相关问题几乎没有帮助。
因此,基于云的架构继续对自由和开源软件的基本目标构成根本性挑战。很难设想一种方法来解决这些挑战,更难以想象它们会在云采用比以往任何时候都更加强大的世界中消失。
开源的云成功
您可以用另一种更积极的方式讲述云中开源的故事。从某些利基的角度来看,比如私有云和“云原生”基础设施技术,开源已经取得了巨大的成功。
我在这里考虑的是像Kubernetes这样的项目,这是一个开源应用程序编排平台,它已经变得如此占主导地位,以至于它甚至不再有真正的竞争。当即使是虚拟机编排工具与Kubernetes竞争的VMware现在也运行自己的Kubernetes发行版时,您就知道Kubernetes赢得了编排器战争。
OpenStack是一个构建私有云的平台,它在基于云的架构上的开源方面也取得了类似的成功。也许它没有像Kubernetes那样彻底消除竞争,但OpenStack仍然是一个非常成功、广泛使用的解决方案,适用于寻求构建私有云的公司。=
您可以对docker得出类似的结论,Docker是一个开源容器化平台,对于希望获得比专有虚拟机更敏捷和资源效率更高的解决方案的公司而言,它已成为首选解决方案。
即使在公司确实希望使用普通虚拟机构建云的情况下,KVM(内置于Linux的开源虚拟机管理程序)现在也能与来自VMware和Microsoft等供应商的竞争VM平台相抗衡。
在构建私有(或在较小程度上,混合)基于云的基础设施时,开源在过去十年中做得非常好。十年前,您将不得不依靠专有工具来填补Kubernetes、OpenStack、Docker和KVM等平台现已成为事实上的解决方案的空白。
开源和公共云

但是,当您查看公共云时,开源似乎不太成功。尽管主要的公共云为Kubernetes和Docker等平台提供SaaS解决方案,但它们倾向于将它们包装在专有扩展中,使这些平台感觉不像实际那样开源。
同时,公有云中的大部分核心IaaS和SaaS服务都由闭源软件提供支持。如果您想将数据存储在AmazonS3中,或在AzureFunctions中运行无服务器功能,或在GoogleCloud中启动持续交付管道,您将使用专有解决方案,您将永远看不到其源代码。尽管存在许多这些服务的开源等价物(例如Qinling,一种无服务器功能服务,或Jenkins,用于CI/CD)。
云市场的消费者方面也由闭源解决方案主导。尽管存在Zoom和Webex等平台的开源替代品,但它们很少受到关注,即使在对专有协作平台的隐私和安全缺陷感到恐慌的情况下也是如此。
构建更好的开源云
反对在云中运行更多开源软件的一个明显反对意见是,云服务需要花钱托管,这使得供应商更难提供免费的开源解决方案。将Firefox赠送给人们安装在他们自己的计算机上很容易,因为用户提供了他们自己的基础设施。但是托管一个相当于Zoom的开源软件会更昂贵,这需要广泛且昂贵的基础设施。
然而,我认为这种观点反映了缺乏想象力。传统的集中式云基础架构有多种替代方案。与传统的IaaS基础设施相比,分布式对等网络可用于托管开源云服务,服务提供商的成本要低得多。
我还要指出,许多专有云服务是免费的。从这个意义上说,SaaS提供商需要收回其基础设施费用,因此无法提供免费和开源解决方案的论点没有多大意义。如果Zoom可以免费用于基本使用,那么它也没有理由不开源。
诚然,让更多的云服务开源并不能解决上面讨论的关于用户在其他人拥有的服务器上运行代码时放弃控制的基本问题。但它至少会为用户提供一些了解他们使用的SaaS应用程序或公共云IaaS服务如何工作的能力,以及更大的扩展和改进它们的机会。
例如,想象一个Facebook或Gmail的源代码是开放的世界。我怀疑对隐私问题的担忧会少得多,如果有人能看到代码,第三方就有更多的机会构建与这些平台集成的优秀解决方案。
但是,就目前而言,这些愿景似乎不切实际。几乎没有迹象表明云中的开源会超越私有云和应用程序部署领域,在这些领域已经占据主导地位。对于任何同意LinusTorvalds的人来说,这是一种耻辱,认为软件免费时会更好。 【
如何在 Linux 下检测内存泄漏
内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。 内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。 可以使用相应的软件测试工具对软件进行检测。 1. ccmalloc-Linux和Solaris下对C和C++程序的简单的使用内存泄漏和malloc调试库。 2. Dmalloc-Debug Malloc Library.3. Electric Fence-Linux分发版中由Bruce Perens编写的malloc()调试库。 4. Leaky-Linux下检测内存泄漏的程序。 5. LeakTracer-Linux、Solaris和HP-UX下跟踪和分析C++程序中的内存泄漏。 6. MEMWATCH-由Johan Lindh编写,是一个开放源代码C语言内存错误检测工具,主要是通过gcc的precessor来进行。 7. Valgrind-Debugging and profiling Linux programs, aiming at programs written in C and C++.8. KCachegrind-A visualization tool FOR the profiling data generated by Cachegrind and Calltree.9. Leak Monitor-一个Firefox扩展,能找出跟Firefox相关的泄漏类型。 10. IE Leak Detector (Drip/IE Sieve)-Drip和IE Sieve leak detectors帮助网页开发员提升动态网页性能通过报告可避免的因为IE局限的内存泄漏。 11. Windows Leaks Detector-探测任何Win32应用程序中的任何资源泄漏(内存,句柄等),基于Win API调用钩子。 12. SAP Memory Analyzer-是一款开源的JAVA内存分析软件,可用于辅助查找JAVA程序的内存泄漏,能容易找到大块内存并验证谁在一直占用它,它是基于Eclipse RCP(Rich Client Platform),可以下载RCP的独立版本或者Eclipse的插件。 13. DTrace-即动态跟踪DynAMIc Tracing,是一款开源软件,能在Unix类似平台运行,用户能够动态检测操作系统内核和用户进程,以更精确地掌握系统的资源使用状况,提高系统性能,减少支持成本,并进行有效的调节。 14. IBM Rational PurifyPlus-帮助开发人员查明C/C++、托管、Java和VB6代码中的性能和可靠性错误。 PurifyPlus 将内存错误和泄漏检测、应用程序性能描述、代码覆盖分析等功能组合在一个单一、完整的工具包中。 15. Parasoft Insure++-针对C/C++应用的运行时错误自动检测工具,它能够自动监测C/C++程序,发现其中存在着的内存破坏、内存泄漏、指针错误和I/O等错误。 并通过使用一系列独特的技术(SCI技术和变异测试等),彻底的检查和测试我们的代码,精确定位错误的准确位置并给出详细的诊断信息。 能作为Microsoft Visual C++的一个插件运行。 16. Compuware DevPartner for Visual C++ BoundsChecker Suite-为C++开发者设计的运行错误检测和调试工具软件。 作为Microsoft Visual Studio和C++ 6.0的一个插件运行。 17. Electric Software GlowCode-包括内存泄漏检查,code profiler,函数调用跟踪等功能。 给C++和开发者提供完整的错误诊断,和运行时性能分析工具包。 18. Compuware DevPartner Java Edition-包含Java内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块。 19. Quest JProbe-分析Java的内存泄漏。 20. ej-technologies JProfiler-一个全功能的Java剖析工具,专用于分析J2SE和J2EE应用程序。 它把CPU、执行绪和内存的剖析组合在一个强大的应用中。 JProfiler可提供许多IDE整合和应用服务器整合用途。 JProfiler直觉式的GUI让你可以找到效能瓶颈、抓出内存泄漏、并解决执行绪的问题。 4.3.2注册码:A-G666#F-1olm9mv1i5uuly#. BEA JRockit-用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。 22. SciTech Software AB Memory Profiler-找到内存泄漏并优化内存使用针对C#,,或其它程序。 23. YourKit & Java Profiler-业界领先的Java和程序性能分析工具。 24. AutomatedQA AQTime-AutomatedQA的获奖产品performance profiling和memory debugging工具集的下一代替换产品,支持Microsoft, Borland, Intel, Compaq 和 GNU编译器。 可以为和Windows程序生成全面细致的报告,从而帮助您轻松隔离并排除代码中含有的性能问题和内存/资源泄露问题。 支持 1.0,1.1,2.0,3.0和Windows 32/64位应用程序。 25. JavaScript Memory Leak Detector-微软全球产品开发欧洲团队(Global Product Development- Europe team, GPDE) 发布的一款调试工具,用来探测JavaScript代码中的内存泄漏,运行为IE系列的一个插件。
SD-WAN网络一般由什么组件构成?
SD-WAN 技术使用软件定义网络 (SDN) 的原理,将控制平面和数据平面分开。基于此原则,SD-WAN 部署通常由以下两个组件组成:
管理员用来集中配置 WAN 拓扑和定义流量路径规则的控制器。
SD-WAN 边缘设备(物理或虚拟)驻留在每个站点并充当 SD-WAN 结构的连接和终止点。
本节介绍两种不同类型的 SD-WAN 架构:
类型 1(分支机构和总部部署)— 在每个分支机构站点,组织可以部署一个或多个 SD-WAN 边缘设备并将它们连接起来以形成 SD-WAN 结构或 SD-WAN 覆盖。 管理员使用基于云或组织内部的 SD-WAN 控制器来管理和配置这些边缘设备,并在每个站点定义流量转发策略。
类型 2(分支机构、总部和区域数据中心部署)— 此架构在区域数据中心添加 SD-WAN 设备,以及在每个分支机构和总部站点添加 SD-WAN 设备。 这些区域数据中心可以是公共或私有云环境。 区域数据中心的 SD-WAN 设备聚合该区域较小站点的网络流量。 当有多个区域分支机构站点的 Internet 连接带宽较低时,组织会使用此部署。
双核处理器的优势是什么?
最主要的是速度快啊。 双核处理器是指在一个处理器上集成两个运算核心,从而提高计算能力。 “双核”的概念最早是由IBM、HP、Sun等支持RISC架构的高端服务器厂商提出的,不过由于RISC架构的服务器价格高、应用面窄,没有引起广泛的注意。 双核处理器(Dual Core Processor):双核处理器是指在一个处理器上集成两个运算核心,从而提高计算能力。 “双核”的概念最早是由IBM、HP、Sun等支持RISC架构的高端服务器厂商提出的,不过由于RISC架构的服务器价格高、应用面窄,没有引起广泛的注意。 最近逐渐热起来的“双核”概念,主要是指基于X86开放架构的双核技术。 在这方面,起领导地位的厂商主要有AMD和Intel两家。 其中,两家的思路又有不同。 AMD从一开始设计时就考虑到了对多核心的支持。 所有组件都直接连接到CPU,消除系统架构方面的挑战和瓶颈。 两个处理器核心直接连接到同一个内核上,核心之间以芯片速度通信,进一步降低了处理器之间的延迟。 而Intel采用多个核心共享前端总线的方式。 专家认为,AMD的架构对于更容易实现双核以至多核,Intel的架构会遇到多个内核争用总线资源的瓶颈问题。 双核与双芯(Dual Core Vs. Dual CPU):AMD和Intel的双核技术在物理结构上也有很大不同之处。 AMD将两个内核做在一个Die(晶元)上,通过直连架构连接起来,集成度更高。 Intel则是将放在不同Die(晶元)上的两个内核封装在一起,因此有人将Intel的方案称为“双芯”,认为AMD的方案才是真正的“双核”。 从用户端的角度来看,AMD的方案能够使双核CPU的管脚、功耗等指标跟单核CPU保持一致,从单核升级到双核,不需要更换电源、芯片组、散热系统和主板,只需要刷新BIOS软件即可,这对于主板厂商、计算机厂商和最终用户的投资保护是非常有利的。 客户可以利用其现有的90纳米基础设施,通过BIOS更改移植到基于双核心的系统。 计算机厂商可以轻松地提供同一硬件的单核心与双核心版本,使那些既想提高性能又想保持IT环境稳定性的客户能够在不中断业务的情况下升级到双核心。 在一个机架密度较高的环境中,通过在保持电源与基础设施投资不变的情况下移植到双核心,客户的系统性能将得到巨大的提升。 在同样的系统占地空间上,通过使用双核心处理器,客户将获得更高水平的计算能力和性能。
发表评论