云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

数据库_计算机三级数据库题型_哪个好

小七 141 0

大数据数据库_个人_一图看懂大数据关键技术

很多关于软件工程的文章都写得很好。很少有关于软件变得越来越复杂而不可避免的错误。最近,我有机会帮助诊断和解决一些部署在现场的软件中的缺陷。这个bug本身的潜在原因非常有趣,我对它进行故障排除和开发解决方案非常有趣。Delphix是作为一个虚拟机发布的,它部署在客户站点上。Delphix引擎,这个虚拟机的名字,新云,连接到客户机,我们称之为环境,并收集关于哪些数据库在这些系统上运行的信息。我们支持多种数据库,包括Oracle、MSSQL、Postgres和MySQL。除此之外,我们还支持运行数据库的环境的许多不同配置,如Linux、Windows、AIX和Solaris。支持许多环境会带来很多复杂性,而这种复杂性最终导致了这个bug。我从我们的支持人员那里收到了一个升级的bug。当我们的支持人员无法解决问题时,通常会针对工程部提出升级。客户是一家国际电信提供商,其Oracle数据库运行在Solaris SPARC计算机上。SPARC是一种基于RISC的处理器架构,由Sun Microsystems开发。在90年代和21世纪初,Sun销售的SPARC系统运行的是为SPARC设计的Solaris版本。当Delphix引擎连接到目标环境时,它推送几个用于操作的预构建二进制文件。它们在客户环境中运行,以发现它们的数据库并与其交互。其中一个二进制文件rsync在我们的引擎试图执行它时崩溃了。它崩溃的原因是它与一个比客户机上更新的libc版本相链接。我们的客户支持已经对此进行了诊断并运行了nmlibc.so公司.6在客户机上转储libc的对象符号,这样我就知道二进制文件需要链接到哪个版本的libc才能运行。结果发现,客户使用的solaris10版本比我们最初测试的版本要旧,这就是为什么libc存在版本差异的原因。有几个看似简单的潜在解决方案,我却没有。我不能构建二进制文件并静态地链接它(与我们发布的二进制文件上当前的动态链接相反),因为libc对其中包含的函数有内核依赖性。升级客户系统是不可能的,因为它是他们的生产服务器。因为我们所有的solaris10系统都有libc的最新版本,所以我们内部没有一台可以用来构建二进制文件的机器。在客户机器上编译二进制文件不是一个选项,因为客户不希望在其生产实例上安装完整的开发工具链。在很快用尽了最明显的选项之后,我开始研究其他方法,以获得适当版本的二进制文件。这是一个困难的问题,原因之一是获得一台具有正确版本的Solaris的机器是相当困难的。solarisparc没有很好的虚拟机仿真,因为它不是x86,而且在虚拟机被广泛使用之前它就很流行。安装介质也几乎找不到。当我最初收到升级时,我们向Oracle提交了一份支持请求,以获取旧版Solaris 10的安装介质。然而,我们不想依赖于Oracle,即使我们得到了它,返利助手,我也需要到总部的服务器机柜中,手动将操作系统从磁盘上安装到我们内部用于测试的物理SPARC机器上。我想到的另一个选择是使用一些大学运行的站点,这些站点为各种版本的Solaris提供已经构建的SPARC二进制文件包。但是,我发现客户在生产系统上有一个随机的二进制文件连接到了网上。我排除的另一个选择是在一台具有更新版本libc的机器上构建二进制文件,但是告诉链接器链接到旧版本的libc上。互联网上关于这一点的最有帮助的文章对rsync来说并不奏效。在用尽了所有这些选择之后,我决定尝试一个更复杂的解决办法。Solaris支持运行容器,Docker推广了这个概念。在Solaris中,它们被称为zone,大数据数据,您可以在一个名为branded zone的地方运行与基本操作系统不同的Solaris版本。我的计划是使用solaris10机器上运行的solaris9区域来构建二进制文件,由于libc具有向后兼容性,客户solaris10安装将支持solaris9上旧版本的libc。对我来说幸运的是,我们公司有许多前Sun员工,而且我能够根据我的计划加入我们的工程闲置频道。在对为什么要设置品牌区域有了一些初步的困惑之后,我能够获得一些关于如何设置ZFS文件系统来支持我的区域的有用信息。然后我使用Oracle文档来运行安装区域。用于品牌专区的solaris9安装介质位于一个相当晦涩且未被充分利用的Oracle站点上,但它仍然有效。经过反复的设置后,我能够登录到我的solaris9区域。我试着用CD机四处转转,云购,发现我的shell没有制表符。老兄,这太老了。我立刻遇到了一些问题。网络堆栈似乎不想出现,所以我无法使用scp将文件复制到区域中。我找到了一个很酷的perl脚本,它使用区域登录提示符将文件导入区域文件系统。然后我复制了rsync的源tarball文件。然后我发现我没有GNU构建工具链。我早就料到这是一个Sun操作系统。更令人担忧的是,我从甲骨文下载的区域安装媒体甚至没有包括suncc编译器。如果没有编译器,我就无法引导gcc的工作版本,并从那里引导我工具链的其余部分。在互联网上搜索了大约一个小时后,我终于找到了一个废弃的ftp站点,里面有各种SPARC Solaris机器的软件包。在对文件命名方案进行了一些明智的猜测之后,我找到了一个gcc的副本,它在我的区域中安装并运行。从那里我引导make和我的工具链的其他部分。然后,我编辑了rsync构建选项,企业软件服务,使之仅链接到客户系统上的库,构建rsync,当我运行ldd-vrsync时,我看到客户系统上有一个旧版本的libc。那是一种非常棒的感觉。然后我花了一段时间来研究如何复制区域的二进制文件。事实证明,您只需在外部挂载区域文件系统,所以实际上我并不需要perl脚本。有时阅读文档是值得的。我用rsync二进制文件组装了一个修补程序包,一天后我听说它已经在客户站点安装并运行。通过一个非常有趣的解决方案,用一个快乐的客户来解决一个复杂的bug是一种很棒的感觉。