机器学习平台建设(四)

发布时间:2024年01月18日

运维支持

随着现代运维体系的不断发展,运维人员和使用的工具也越来越专业,运维理念也在不断的进步。而目标一直都很清晰:提升稳定性,降低成本。提升服务稳定性是所有在线服务提供商的追求,服务问题会直接影响到业务。此外,服务规模很大后,服务器消耗就成了服务成本中不可忽视的一部分。如何降低服务器成本也是现代化运维的研究方向。提升自动化水平是重点的方法,自动化水平的提高带来的益处很多,一方面是每个运维人员能够管理的服务器规模会随之提升,降低了管理成本,另一方面自动化会减少人工操作,减少手工错误的机会。

运维支持从层次来看,从机房建设的基础设施运维,操作系统、DNS服务等的系统级运维,到软件发布、监控的运营运维,覆盖了从物理层到服务质量的所有层次。可以说,从一台服务器都没有到业务能够顺利运行,整个建设过程都属于运维的范畴。

在运维支持时,最重要的是保证服务质量。这一点常常会被参与者所忽视,特别是开发人员。在遇到服务问题时,开发人员更容易想到的是哪里有缺陷,该如何修复。有时,服务问题可以暂时通过重启服务,版本回滚等方式临时修复,这种情况下应立即进行修复,而不是调研问题的根源。等服务恢复后,再调研出现问题的原因,并进行彻底修复。

监控

监控是运维服务中不可缺少的一环。在硬件层面,通过监控能发现硬件故障,及时进行替换,保证不丢失数据,不造成服务宕机。在服务层面,监控信息能帮助了解资源的使用情况,及时对资源进行调整,防止过载造成的服务问题。也可以帮助发现新代码部署的问题,从而终止发布。业务层面的监控还能在第一时间看到业务的健康状况,及时采取业务上的行动。

运营世界级平台时,运维支持和服务监控都是7x24全天候工作。一般会有人员轮流值守,保证服务的稳定运行。值守人员在遇到无法处理的问题时,还会联系开发人员或第三方合作伙伴来深入调查问题,尽快恢复服务。

有的监控还有警报的功能,在过载或者服务不正常时,通过短信、电话、邮件等方式通知到人,进一步采取行动。

除了出现问题的警报,监控还要支持日常数据观测、发现异常。在用户还没感知到时,就开始解决问题。如建模的试验平台的瓶颈在哪里,是网络速度、存储容量、还是计算单元的数量等等。再如,当应用服务部分响应速度变慢时,可以帮助分析具体的瓶颈在哪里,及时做出调整。

高可用与灾备

在数据部分,已经简单介绍过高可用和灾备的概念。根据需求,平台可能也要提供高可用和灾备的能力。

在高可用上,要充分利用各种负载均衡的方案,提高横向扩容的速度,同时要减少扩容时的手工操作以减少人为错误,将扩容过程自动化程度不断提高。另外,需要在监控中发现问题节点,及时将其终止服务,以免用户访问到这个节点出现异常。

灾备用于应付突发情况。平时需要做好演练,才能保证关键时刻能起到作用。灾备的同时,通过跨地域的多点服务也能有效提高不同地方的访问速度,也其称为异地多活。异地多活对数据同步、多版本共存都是很大的挑战。

配置化管理

现代运维开始从自动化脚本管理向配置化管理来演变。配置化管理,是为每个服务创建好脚本和配置,根据负载、升级需求等,按需创建、启动实例。整个过程几乎全自动进行,不需要人工干预。

在配置化管理的方法下,要准备好服务镜像,对应的服务部署脚本等。一旦需要增加服务器,就能自动分配资源,运行服务,并加入到负载均衡集群中。同样,从集群中删除服务器也需要配置化的流程管理。在这些过程中,要等服务准备好后,才能将其加入到集群中,否则部分用户流量可能会到达还没准备好的服务上,从而产生错误。

日志

日志是比监控信息更细的服务器运行情况,有些监控信息也是从日志中抽取的。线上服务不能像开发环境一样随时进行调试,一般的问题诊断都要依赖于日志。在建模时,除了对关键的指标进行埋点外,还需要在日志中记录一些辅助的信息,以便在生产环境中能够发现并定位问题。

日志需要统一收集到一起,方便进一步的日志分析和聚合。日志分析功能需要按照关键词、时间、组件、物理机等各个维度来缩小问题的日志范围,从而能快速找到问题。还有一些人工智能运维系统(AIOps)能够自动定位到可能的问题点,加快问题的诊断。

易用性

机器学习平台的易用性也非常重要。一方面是在平台管理上的易用性,另一方面是平台用户的易用性。

如果团队的产品就是机器学习平台本身,平台的部署、升级、扩容都要提高易用性,让新用户能够方便的做好运维。小团队部署机器学习平台时,没有太多精力进行系统调研,易用的平台是小团队的首选。所以,要考虑如何能让新用户很快的学会搭建平台,用上平台。有了新功能后,如何让用户知道,用户又如何升级。在用户需要对平台算力进行扩容时,是否通过简单配置就能完成。

平台的可视化管理也很重要。除了第一步部署很难完全通过可视化用户界面来实现外,其它步骤理论上都是可以通过界面来实现。这样能大大减低平台的学习门槛。当然,并不是有了可视化界面,就能提高易用性。可视化界面的设计要遵循用户的使用场景,并尽量简化。

平台使用时,也同样需要更高的易用性。不仅小团队需要直观易学的界面,大团队也有人员替换,易用的平台能让新人尽快熟悉工具、展开工作。

平台除了需要提供数据集、训练任务、模型的可视化管理功能外,还要有便利的任务提交功能。由于任务提交通常是伴随着代码编辑进行的,所以可以在流行的集成开发环境上,开发插件来帮助提交任务。有的开源机器学习平台已经在一些集成开发环境中实现了任务提交、管理和数据管理的插件。

安全性

安全性是互联网服务运维最重要的话题。几乎每个公开服务每天都会受到攻击。最典型、最普遍的是无差别扫描攻击,即对每个IP进行自动的全面扫描,如果服务器有明显漏洞,就会被自动攻击。攻陷后,就会成为僵尸网络的一部分,被黑客所利用,开始进行无差别扫描工具,参加定点攻击,作为黑客跳板等各种黑客活动。服务器不仅会干坏事,还消耗带宽、计算资源等成本。除了无差别攻击,一些著名公司和网站还会受到定点攻击,黑客不仅通过工具扫描,还会人工分析漏洞,进行更高强度的渗透攻击。一旦被攻破,就存在数据泄露和服务被破坏的风险,甚至会让整个公司的业务陷于失败。

安全保障是矛与盾之战,常常是道高一尺魔高一丈,是一场永不停息的战斗。有条件的团队可以请专业白帽黑客团队来进行渗透测试,或进行漏洞悬赏。找到漏洞后,要尽快修补。除了对已知漏洞的快速修补,还需要系统化的分析,进行威胁建模,对每一种攻击和自身的漏洞进行防护。下面列出了一些常见的安全方面的考虑,但远不是全集。只要建立了成体系的防护,一般的一两个漏洞也无法形成完整的攻击链条,不会对业务产生实际的威胁。

认证授权

认证授权是两个过程,认证是指的通过用户名、密码等方式,确认用户的身份。授权是在用户身份确认后,根据系统内的信息,决定给用户何种权限。

  1. 统一认证。即多个系统都用同一套用户名密码来登录,修改密码、增删用户都是一体的。机器学习平台本身需要有认证授权的功能,让有权限的用户才能访问对应的资源。如果企业中资源过多,每个资源都是单独的认证体系,个人确实比较难以管理认证资源。这时需要提供统一认证来简化系统,让认证系统真正发挥作用。如果机器学习平台组合了带有认证功能的开源工具,要将这些工具的认证统一起来,方便使用。

  2. 两阶段认证。即除了输入用户名密码外,还会依靠用户的其它电子设备或硬件来完成认证。用户名密码有可能会被钓鱼网站、用户计算机上的木马盗走,所以还需要第二阶段的认证来保证安全。一般是通过手机上定时刷新的二次认证码来进行第二阶段认证。也有通过短信、电话等方式进行第二阶段认证。

  3. 用户权限管理。即管理如何给用户授权。一些业务系统还需要用户登录,也要防止用户信息被盗用。可参考一般的网站设计方法,对用户账户要防暴力破解,短信轰炸等攻击。

  4. 内部管理。有的团队中,虽然有认证授权的机制,但实际上密码统一、账户互相借用,认证授权体系形同摆设,这都会造成漏洞。安全不仅是技术问题,同时也是管理问题。不仅要在工具上强制一些安全策略,在内部教育上也要有安全的一席之地。

网络安全

网络安全除了一些协议层的攻击外,主要还在于平台的安全建设。在建设机器学习平台时,可能会组合一些开源工具。不少开源的平台级工具都建议在内网使用,默认安装也没有配置认证,在默认的网络端口监听服务。

机器学习平台在内网部署时,虽然安全性要求要低一些,但也需要基本的保障。如果公司的网络安全建设不足,如果被攻破了,机器学习平台就会面临较大的安全威胁。

在将机器学习平台提供给外部用户使用,甚至允许用户直接部署时,更需要提供全面的安全建议。如,哪些服务器需要开放哪些端口,端口的用途是什么。哪些服务器要放在内网,哪些需要放在防火墙边缘区域。如果直接开放了开源组件的端口,要注意开源社区上发布的安全补丁,及时进行升级。

服务器安全

服务器管理上要注意的事情不少。包括关掉不必要的服务、端口,管理好账户、密码,不要使用弱口令,及时屏蔽服务安装后的默认账户、危险功能等,经常性的注意安装安全补丁。这些都能大幅减小服务器的被攻击面。

每个服务部署的时候,应使用单独的账户部署服务。一旦某个服务被攻陷后,减小对其它服务以及整台服务器的威胁。

代码安全

一般的现代语言,在服务器端要注意防止SQL注入攻击。如果有内部反向代理的,还要注意网址的白名单过滤。如果是c/c++代码,还要注意防止缓冲区溢出攻击等问题。

数据保护

数据常常是业务的核心资产,需要进行重点保护。要对内部、外部数据使用者都做好数据隔离、数据保护工作,减少数据泄露的风险。同时,对用户数据需要做隐私保护。

  1. 数据隔离。即对数据分级管理,没有权限的人不能访问相应的数据。对于核心的业务数据,要最小化授权,只给予必须的人以权限,从而减少数据的泄露风险。对于核心数据,如用户的联系方式等,可以在授权时记录日志。一旦数据泄露后,可以根据泄露数据反查到泄露渠道。

    机器学习平台建设时也需要考虑到数据隔离问题。日常试验的样本数据应该是业务数据的一个子集,并在此数据集上抹除用户数据及业务敏感数据。如果要更新数据集来提高数据集的质量,可以对试验数据集单独进行更新,不推荐将整个生产数据集暴露给所有团队成员。

  2. 隐私保护。即保护用户的核心个人数据,特别是能帮助找到某个人的信息。保护好用户隐私不仅是对用户负责,也是对团队、企业的名声负责。泄露后危害最大的是用户密码,要对用户密码通过哈希方法加盐(salt)加密。对用户姓名、电话、地址等信息,可加密后存储,并保管好密码,仅让核心运维人员来保管、配置此密码。对于非密码字段可以不加盐,这样,同样的加密后的内容还能保持一致,不影响后面的数据聚集等操作。

安全日志

安全日志是安全的最后一关。当发现漏洞后,有可能通过安全日志找到攻击路径、攻击方法,以便封堵漏洞,评估损失。需要将系统、软件、审查的安全日志都定期备份到独立的位置,防止被攻击方抹除。

文章来源:https://blog.csdn.net/2301_81887304/article/details/135617352
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。