首页 文章 精选 留言 我的

精选列表

搜索[思考模型],共10000篇文章
优秀的个人博客,低调大师

Mozilla 和 Firefox 的变迁:市场下滑背后的思考

最近Mozilla基金会发布的2023年度报告引发了广泛关注。报告显示,在Mozilla CEO薪酬大幅上涨的同时,其旗舰产品Firefox浏览器的市场份额却持续下滑。这一现象不仅反映出Mozilla的财务状况尚佳,也揭示了其业务重心可能正在发生变化,但同时也让人不免对Firefox前景产生担忧。 The State of Mozilla网站截图 具体来看,2022年Mozilla CEO的年薪高达690万美元,较去年增加了130万美元,达到创纪录的新高。与此形成对比的是,Mozilla的整体收入出现轻微下滑,由2021年的6亿美元降至2022年的5.93亿美元。这表明,尽管财务资产总额继续增长,达到高达13亿美元,但收入增长出现停滞。 更值得关注的是,在Mozilla财务数据保持乐观的背景下,其核心产品Firefox的市场表现却难掩颓势。据统计,2022年Firefox的全球浏览器市场份额已从2021年底的3.79%下降至3.04%,跌幅达20%。考虑到近年移动互联网的快速发展,这一数据更显示出Firefox在移动端的表现不佳。 面对Firefox市场份额的下滑,业内分析普遍认为其背后反映的是Mozilla业务重心的转变。在财务报告中可以看出,Mozilla的“版税收入”有所下降,而“订阅和广告收入”则有所增加,似乎显示出其正在加速多元化业务,减少对Firefox的依赖。而今年早些时候,Mozilla CEO就明确表示,公司将重点转向人工智能等新兴领域。 因此,有分析指出,Mozilla可能正处在从浏览器向人工智能等新业务转型的关键节点上。这可能也解释了为何在Firefox表现疲软的情况下,企业高管的薪酬水平还能大幅提升。很显然,Mozilla领导层正在根据新的发展战略进行调整。 但业内也存在担忧的声音。毕竟,Firefox曾是开源运动的一面旗帜,同时也是少数能与Chrome竞争的浏览器之一。一旦Mozilla继续减少Firefox投入,将可能对浏览器市场格局和网络开放性产生一定影响。 最近,Mozilla基金会报告在Hacker News社区也引发了热烈讨论。许多社区成员对报告反映出的Mozilla业务战略转变表示不解甚至失望。他们普遍认为,Mozilla不应过度减少对Firefox的投入,而应更专注于维护其核心产品。 一些用户还表示,由于Firefox的私密性保护功能,其实际用户量可能高于统计数据。他们希望Mozilla能继续致力于提升Firefox的核心功能,如密码管理、广告屏蔽等,这对维系用户群至关重要。此外,一些社区用户还呼吁Mozilla应该采取行动巩固Firefox的市场地位,确保浏览器市场的开放和多样。 综合来看,Mozilla当前的市场表现确实反映了一家企业在变革中的两难处境。CEO薪酬的大幅提高似乎预示着企业正根据新的发展战略进行市场调整,这在商业上也许可理解。但作为曾经开源界的领军产品,Firefox的持续下滑无疑让人担忧。维护核心产品与开拓新业务之间的平衡,可能是Mozilla当前面临的主要难题。 无论前景如何,Firefox在开源浏览器市场的地位和作用还将持续受到业内关注。而Mozilla也面临着在财务增长和维系开源社区期望之间找到最佳路径的挑战。我们期待Mozilla能继续致力于开放和创新,同时维护其社区支持度。毕竟,只有在社区的积极参与下,开源精神才能持续发扬光大。 注:Mozilla的报告总是会滞后一年,所以文中提到了很多2022年的信息

优秀的个人博客,低调大师

编排流程/规则,编排本身也需要很深的逻辑思考!

什么是流程/规则编排? 所谓编排,就是让已有的节点通过不同的组织方式完成不同的需求。 首先,我们需要对既有业务做一定程度的抽象,以一个例子开始: 一个简单的国庆节充值活动: 活动时间 10.1-10.7 充值≥100 元,送 5 元余额 充值≥50 元,送 10 积分,10.5 之后开始 不叠加送, 即充 100 元只送 5 元余额不会叠加再送 10 积分 当充值发生时,我们拥有:充值用户-uid,充值金额-cost,充值时间-time 再有一些制作好的抽象节点,如: 判断充值≥100 的条件节点 ScoreFlow-100,cost≥100 返回 true,否则返回 false 判断充值≥50 的条件节点 ScoreFlow-50,cost≥50 返回 true,否则返回 false 发放 5 元余额的结果节点 AmountResult,结果也可以有返回,比如正常发放了返回 true,库存不足了等原因导致的没有发放(不是 error),可以返回 false 发放 10 元积分的结果节点 PointResult 那么,为什么要编排,如何编排才是最优的? 为什么要编排? 屏蔽代码影响: 比如编排者只需要知道 AmountResult 是发放余额的节点,然后在适当的位置运行这个节点即可,不需要关心真实的代码逻辑 提升效率: 结合可视化给非研发人员编排实现业务逻辑,支持动态修改与生效配置,比如充值条件 100 元改成 200,结合可视化工具直接修改,解放研发,提升生产效率 如何编排? 流程图式编排 脑海里最先出现的编排方式,也是最常见的编排方式 执行树式编排 When X Then Y 以上两种基本代表了传统的编排思想,在简单的例子下,看起来也是非常直观,但,当变动发生时,尤其是需要灵活调整的场景,他们的表现又如何呢? 变动 ①简单配置修改 充值 100 元改成 80 吧,10 积分变 20 积分吧,时间改成 10.9 号结束吧(**微微一笑,**毕竟我费了这么大劲,终于体现到价值了!) ②简单逻辑变动 用户参与积极性不高啊,去掉不叠加送吧,都送(**稍加思索,**费几个脑细胞挪一挪还是可以的,怎么也比改代码再上线强吧!) ③进阶逻辑变动 5元余额不能送太多,设置个库存100个吧,对了,库存不足了充100元还是得送10积分的哈(**卒…**早知道还不如硬编码了) 真实线上变动只会更离谱,流程图式和执行树式实现的主要缺点在于,牵一发而动全身,改动一个节点需要瞻前顾后,如果考虑不到位,很容易弄错,现实的活动内容要比例子复杂的多,时间线也是多条,考虑到这,再加上使用学习框架的成本,往往得不偿失,到头来发现还不如硬编码 那么,有没有更好的编排逻辑? ice是如何编排的 如图,ice使用关系节点作为逻辑传递的桥梁,用树图方式呈现逻辑 关系节点(逻辑节点) 控制业务流转,如: AND: 从上到下执行子节点,遇到第一个false中断并返回false,全部为true则返回true,类似于 Java 的 && ANY: 从上到下执行子节点,遇到第一个True中断并返回true,全部为false则返回false,类似于 Java 的 || ALL: 从上到下执行所有子节点 叶子节点(业务节点) 真正做事情的节点,如: Flow: 一些条件与规则节点,如ScoreFlow Result: 一些结果性质的节点,如AmountResult,PointResult None: 一些不会干预流程的节点,如下文会介绍到的TimeChangeNone 执行流程 图中,如果10月4日,充值100元,则执行流程为: 从根节点开始,先执行ANY 充值时间在ANY生效时间内,继续执行 ANY有两个子节点,先执行第一个子节点AND AND有两个子节点,先执行第一个子节点ScoreFlow-100 ScoreFlow-100判断并返回true AND接收到true,继续向下执行AmountResult AmountResult发放余额并返回true AND子节点执行完毕,接收到两个true,自己也返回true ANY接收到true,不再继续执行子节点并返回true 可以看到,之前需要剥离出的时间,已经融合到各个节点上了,把时间配置还给节点,如果没到执行时间,如发放积分的节点 10月5日之后才生效,那么在 10月5日之前,可以理解为这个节点不存在 变动的解决 对于①直接修改节点配置就可以 对于②直接把ANY 改成 ALL 即可(叠加送与不叠加送的逻辑在这个节点上,属于这个节点的逻辑就该由这个节点去解决) 对于③由于库存的不足,相当于没有给用户发放,则 AmountResult 返回 false,流程还会继续向下执行,不用做任何更改 再加一个棘手的问题,当时间线复杂时,测试工作以及测试并发要怎么做? 一个 10月1日开始的活动,一定是在 10月1日之前开发上线完毕,如我在 9月15日要怎么去测试一个10月1日开始的活动?在 ice 中,只需要稍微修改一下: 增加了个子节点TimeChangeNone(用于更改测试环境请求里的充值时间,可以改成任意想要的测试时间) 特性 为什么这么编排呢?为什么这样就能解决这些变动与问题呢? 其实,就是使用树形结构解耦,流程图式和执行树式实现在改动逻辑的时候,需要瞻前顾后,但是 ice 不需要,ice 的业务逻辑都在本节点上,每一个节点都可以代表单一逻辑,比如我改不叠加送变成叠加送这一逻辑就只限制在那个 ANY 节点逻辑上,只要把它改成我想要的逻辑即可,至于子节点有哪些,不用特别在意,节点之间通过上下文传递信息,每个节点执行完的后续流程不需要自己指定 因为自己执行完后的执行流程不再由自己掌控,还可以做到对象级别的复用: 如图,参与活动这里用到的 TimeChangeNone,如果现在还有个 H5 页面需要做呈现,不同的呈现也与时间相关,怎么办?只需要在呈现活动这里使用同一个节点对象(在ice后台配置中为同id节点),更改其中一个,另一个也会被更新(因为他们是同一个对象,不存在多个复用节点同步问题),避免了到处修改时间 Code Talk is cheap. Show me the code… 官方文档:http://124.221.148.247/zh/ GitHub:https://github.com/zjn-zjn/ice Gitee:https://gitee.com/waitmoon/ice 微信公众号: waitmoon 有更好想法或者更多应用场景或者想一起探讨的小伙伴~ 欢迎交流~

优秀的个人博客,低调大师

业务数据迁移上云的一些技术思考

前言 在支持京东集团内部及京东云外部客户的业务迁移到京东公有云及京东私有云、京东政务云的过程中,京东科技-京东云事业群-技术服务组积累了相关业务系统数据迁移的一些管理和技术经验,以案例的形式分享给大家,希望对大家的业务迁移工作有所帮助。 迁移前的准备工作 业务迁移上云涉及到的业务数据种类繁多,主要类型包括: 数据库: 关系型数据库 MySQL 、PG、Oracle等 对象存储: 标准S3接口对象存储迁移中间件数据:ES、mongoDB、redis等 文件存储: 文档、图片等非结构化数据 大数据: HBASE、HDFS files等 京东云的内外部客户在上云过程中,大部分业务均涉及到以上多种数据类型,基于相关迁移的案例所积累的经验,数据迁移需要在迁移启动前至少做好如下准备工作。 1、可执行的数据迁移技术方案制定完成,包含明确的迁移操作步骤(迁移前准备工作,迁移操作、迁移后校验工作)、执行人、确认人。 2、制定迁移应急预案及回切方案,明确责任矩阵,确认异常情况的决策条件及决策人。 3、确认数据安全等级,确认数据迁移的方案合规安全,通过相关业务安全部门审核。 4、迁移时长及割接数据同步窗口的评估(以POC验证数据信息为基础制定),确认各个业务及数据迁移可选的第二方案。 5、 确认网络带宽及质量满足迁移需求。 案例分析 下面是几个案例,涉及到了不同数据迁移的场景。 一、关系型数据库 MySQL: MySQL在迁移中最为常见,也有很成熟的迁移工具和迁移方案,包括官方工具和相关开源工具,如mysqldump等,各个云厂商也都有各自的DTS迁移工具。 DTS工具: DTS服务在传输及同步、数据校验等步骤都实现了一定的抽象化,具有相对友好的交互界面,同时可以实现多个任务并行进行,对要求平滑迁移的场景,具有自动化优势,节省大量人力,有部分DTS工具可以实现跨版本迁移。 DTS的限制是: (1)源端数据库与目标端数据库与DTS管理服务IP网络互通,并具备稳定的网络连接。 (2)数据库需要满足一定的前提条件才能实现迁移后的增量同步功能,通常的需求是权限需求,比如REPLICATION SLAVE,REPLICATION等,同时存储过程及函数在全量+增量的场景下不会被包含,在全量迁移阶段,不支持 Alter Table、Drop TableDDL操作,**不同厂家的工具限制条件可能不同,需要仔细阅读产品说明,并通过POC验证功能。 mysqldump工具: 适合的场景,数据库源端与目的端没有良好网络连接或无网络连接的情况下,允许有一定的业务中断时间,则在停机窗口完成数据导出、导入是比较适合的方案(如果具有主机级别的管理和控制能力,直接将数据库主机整体以镜像方式迁移也是一个可行的迁移方法)。 Mysqldump导出导入速度相对DTS要快(本地操作,而且与DTS相比,少了一些中间环节),但是多了一个数据文件压缩及通过网络或移动介质传送的时间。 其他开源及商业工具,如streamset等,可以支持mysql到异构数据库的同步,功能比较强大,同时限制也比较多。 迁移时长的估算: 业务割接过程中,业务数据的迁移及同步是切换前的重要步骤,也是割接过程中耗时较长,容易出现错误并导致割接延时或失败的环节,因此要对数据迁移及同步耗时做出靠谱的估算。 数据库同步,是表级别的并发来迁移全量数据,因此,DTS得结合实际的数据类型、数据行数、网络带宽、网络延迟、同步实例规格,库表的数量、单库表的大小等因素评估时长。 举例来说,数据库大小 500G,有5张表,其中一个单表400G,剩下4张表 各25G,因单表400G相对较大,迁移时长会拉长。如果是5个100G的表,迁移时长会缩减。 在正式迁移生产数据前,一般会有对测试环境的迁移POC,来验证和评估生产环境的切换流程及耗时,制定生产业务割接的计划时,要以这个时间为数据库迁移的时长依据。 京东云DTS数据迁移同步架构如下图: 案例一 从友商公有云迁移到京东公有云云,由于源端binlog问题导致的一次DTS迁移到手动迁移方式的转换。 项目条件,业务具有8小时的停服时间,因此在迁移技术方案DTS及手动导数据库都是可选方案,鉴于DTS的不停服及数据增量功能特性,我们选择在停服前开始通过京东云DTS服务同步历史数据,并开启DTS增量同步功能,基于停机窗口,我们给数据库在线迁移及增量同步的时间为4小时,DTS服务不影响在线业务,基于测试环境的迁移经验及评估。 在停服前的下午,为了给迁移留出足够的时间缓冲,我们提前启动了主数据库的DTS服务,数据库迁移进程正常进行,预计迁移时长为4小时,但是在DTS服务最后阶段,因源端binlog问题,出现了一个致命错误,导致DTS任务失败。 Migration Task Run Error ERROR 1236 (HY000): The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires. Region: cn-north-1 ClusterGID: dts-r1rroa ERROR 1236 (HY000): The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires. 因为最终binlog错误(部分binglog丢失),DTS任务无法恢复,最终DTS传输的4小时时间被浪费,因迁移是系统工程,其他数据迁移进程也都在根据计划推进,此时大家都没有时间去分析具体原因。 因到晚上客户业务已经推送通知并停服,此时业务迁移的其他数据迁移及业务调试已经开始。 所以,当机立断决定以mysqldump模式导出文件,本地导出速度很快(20M/s),压缩后的数据库导出文件体积缩小,减少了网络传输耗时。通过网络传输到京东云侧的云主机,然后source方式导入RDS。导出、传输、导入整个过程耗时小于2小时。 导入MySQL数据后,根据迁移流程做迁移数据校验,使用checksum_table工具对源端和目的端数据库做对比。 源库信息:—src-host sourceIP —src-user user —src-pass pass 目标库信息:—dest-host targetURL —dest-user user —dest-pass pass 验证过程中,发现部分表不一致,与业务方确认为源端在迁移开始后,停止服务不彻底导致,仍然有数据写入操作,因为业务侧并没有根据迁移规范检查mq、kafka的消息产生情况,只是停止了部分服务,后经业务及研发检查新增数据,对部分数据做清理后,完成数据库的迁移工作。 根据项目经验,这种DTS服务因binlog问题导致的失败情况并非个案。 准备工作 (1)为数据库迁移准备一个备选方案并准备好应急预案。 (2)出现问题时,决策条件及决策人提前确认,在实施过程中能根据需要及时决策做出调整。 厂商改良(非原生)的数据库的迁移: 在某些云厂商的特定数据库版本中,会对标准的数据库产品如mariaDB、PG等数据库做一些定制化的开发,以满足客户的业务的某些特殊需求,这种数据库属于厂家深度绑定的类型,在做业务迁移或灾备数据同步的时候,根据时间场景做定制化的迁移及同步方案,大部分需要从研发层面做一些定制化的配置和操作。 案例二 某金融用户,原系统运行于T的金融云,使用了定制化的RDS服务,因金融行业的业务及数据灾备规范,需要做异地容灾,目标为实现业务级别灾备,将灾备系统运行于京东金融云平台。 为实现从T云定制化的TDSQL到京东云的迁移,对源端的数据库做了详细调研,因为源端是定制化的、具有自动水平拆分、Shared Nothing 架构的分布式数据库,因此使用京东云的DTS工具不适用于这个场景,同时,在两个环境,要求数据基本为实时同步才能满足业务容灾的需求。 制定方案 在制定数据同步方案时,也对传统灾备厂商的方案做了调研,因传统厂商灾备方案多以主机级别数据及IO分析或日志分析为基础,需要做一些侵入式agent的安装,与云上RDS的场景无法适配,相关厂商也表示正在做向云上灾备的转型,但尚未有成熟落地的产品(适配难度较大),因此最终方案采取了基于gtid的主从复制的方案来实现数据库的异构云同步,屏蔽了架构差异带来的问题。 注意:涉及业务信息及底层操作的部分内容已经隐去。 首先对源端做权限调整: GRANT SELECT, RELOAD, SHOW DATABASES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, SHOW VIEW ON.TO ‘user’@’192.168.%’ 对源端做全量的逻辑备份: mysqldump –h xx –uusername -p –database nx_db -f —single-transaction —master-data=2 —skip-lock-tables > /data1/bs.dmp 注意导出文件中要有gtid信息。 灾备端导入: mysql –h xx -f –uusername -p < bs.dmp 后台做复制配置: set gtid_slave_pos=’0-13381-1xxxx06’; CHANGE MASTER TO MASTER_HOST=’sourceIP’,MASTER_USER=’username’,MASTER_PASSWORD=’*‘,MASTER_USE_GTID=’slave_pos’; 同步验证 数据验证 (1)业务侧停止写操作,在T云侧和京东云侧分别通过checksum table tablename对关键表做校验。 (2)业务侧在T云/京东云两边分别执行命令,对表/view等做数量校验: select count(1) from information_schema.tables where table_schema=’nx_db’; select count(1) from information_schema.views where table_schema=’nx_db’; 业务测通过创建测试表/增删改查等操作验证ddl/dml是否正常复制。 基础功能验证完成后,还需进一步验证源端数据库主从切换以及网络中断对数据库同步的影响,对源端数据库的日志配置,要提出Binlog本地保留时长需求(不少于48小时),避免网络中断时间过长导致的日志过期 而影响数据库的同步业务。 为保障数据及业务灾备的可靠性,需要对网络专线做实时的监控及告警配置,当出现网络问题时,需要能及时收到告警,第一时间处理,避免中间专线网络中断对灾备业务的可用性的影响。 POC验证期间曾经对网络影响进行中断测试,中断2小时,后续观察数据仍能正常同步追平,能够容忍实际业务中可能出现的网络中断造成的影响。 对源库的保护 在这个异构云容灾的案例中,因为与源端云是通过专线做了网络互通,而源端的数据库是通过IP方式访问的,因此,在应用主机整体迁移到京东侧后,主机仍然可以通过网络访问到源端数据库,这样有可能对源端库的写操作,为阻断对源端数据库的访问,可以采用主机安全组方式,阻断主机对外部3306端口的访问,或通过子网级别的ACL,限制对指定网段的特定端口的访问,在应用配置调整后,数据库连接指向改变后,再调整安全组条目或ACL策略,放开对应的访问权限。 因部分数据库的子网规划问题,使用ACL可能对数据库同步造成影响,因此在此案例,为业务主机创建一个附加安全组,配置3306端口阻断策略,实现了对源端数据库的访问保护。待业务调整完成后,解除安全组,即可实现业务数据的正常写入。 二、ES迁移 ES应用越来越广泛,业务迁移中,ES数据迁移已经成为数据迁移的一个重要部分。 ES迁移技术涉及停服迁移及不停服迁移,不停服迁移对迁移的源端和目的端网络及服务有很多要求,目前实现起来尚有很多限制,目前一般只在集团内部业务做ES不停服迁移。 通常停服迁移技术路径可选择reindex或snapshot方式及logstash方式,几种方式均要参考官方对版本的要求,选择满足版本要求的迁移方式。 Snapshot方式: Snapshot方式,从源ES集群创建数据快照,然后在目标ES集群中进行恢复。创建快照前必须先创建repository仓库,一个repository仓库可以包含多份快照文件。repository支持S3及共享文件存储系统等,自建的ES可以使用共享文件存储(从速度、成本等因素考虑,是最佳选择),使用公有云ES服务的建议采用支持S3协议的对象存储。 从速度和效率上来讲,快照方式优于reindex,当不需要对源端做任何变更,且网络存储条件具备时,优先选择快照方式迁移ES。 reindex是Elasticsearch提供的一个api接口,可以把数据从源ES集群导入到当前的ES集群,实现数据的迁移,reindex适用于数据量较大,有索引调整需求或无法连接共享存储的迁移场景,以及只需要迁移部分数据的场景。 reindex方式需要目标端能够访问到源端ES的服务端口。 案例三 客户业务从友商云迁移到京东云,源端ES为K8S集群自建服务,服务访问方式为nodeport方式,因为安全原因,限制访问方式为内部业务主机访问,服务未通过互联网对外开放。 选择迁移技术方案,源端自建的ES未安装S3插件,考虑到快照方式迁移需要源端安装S3插件,而通过POD方式部署的业务需要重新制作镜像并更新应用,从时间及工作量上考虑不是最佳选择,因此采取reindex方式来做业务数据的迁移。 为实现从京东云侧对ES的数据拉取,在源端配置一个nginx反向代理,实现了通过公网对内部ES接口的访问,同时配置白名单,限制访问IP为京东侧NAT网关出口的公网IP,确保数据的访问安全。 在京东云侧,因生产环境子网未配置公网出口,为临时拉取数据,满足迁移需求,调整路由表,配置明细路由,将源端公网IP配置到对应子网的路由表中,指向NAT网关,临时打通公网连接,通过NAT网关可以拉取到源侧的ES数据,并在ES服务中对源端的公网IP做加白操作,注意加白操作会重启ES服务。 为满足网络通信需求,临时配置ES子网的明细路由,完成数据迁移后需删除明细路由。 迁移前,确认相关迁移条件已经具备: 源端及京东云ES服务均创建对应索引,需要确认云上索引是新建的,源端与目的端的mapping可以一样,也可以不同,通过reindex,可以实现修改mapping后的字段类型。 可以从京东云侧ES访问到源端云侧服务的ES的服务端口,验证方式,telnet或curl -XGET http://:9200方式验证均可。 在源端创建索引: 源ES集群 1.创建索引(示例) PUT 11_index_11 { “mappings”: { “user”:{ “properties”:{ “name”:{“type”:”text”}, “title”:{“type”:”text”}, “age”:{“type”:”integer”} } } } } 2.写入数据(示例) POST 11_index_11/user { “title”:”manager”, “name”:”XP”, “age”:22 } 目标端ES配置 1.创建索引(示例) PUT 11_index_11 { “mappings”: { “user”:{ “properties”:{ “name”:{“type”:”text”}, “title”:{“type”:”text”}, “age”:{“type”:”integer”} } } } } 2、配置 reindex.remote.whitelist 参数,指明能够reindex 的远程集群的白名单,并重启目标端集群服务。 3 、reindex迁移数据 POST _reindex(示例) { “source”: { “remote”: { “host”: “http://sourceIP:9200“, “socket_timeout”: “1m”, “connect_timeout”: “10s” }, “index”: “11_index_11” }, “dest”: { “index”: “11_index_11” } } 迁移后,做数据校验,完成ES的数据迁移。 三、对象存储的迁移 对兼容S3协议的对象存储数据迁移,各个公有云厂商(包括部分传统灾备厂商)均有迁移工具或脚本,迁移技术难度不高。但是,因为不同厂家的对象存储在不同region可能存在底层版本及配置差异。 因此,同一个工具或脚本,在处理不同区域的对象存储数据时,可能会出现文件访问问题,在做迁移前后,需要对迁移的数据做完整性和可用性校验。 对象存储迁移的一般顺序: 1、目标端配置镜像回源,保证读404可以回源拿到数据 2、使用迁移工具迁移源端的历史数据 3、同步后的数据校验 实际迁移中,因为涉及到增量数据的同步(迁移工具支持对transfer.coverFile的参数设置,是否覆盖文件,因此也可以做到增量复制),因此,应根据项目实际的数据存储量、业务访问特性、业务停机窗口等信息,综合考虑迁移流程和选择技术方案。 案例四 某业务从友商云迁移到京东云,涉及到对象存储迁移,源端文件数量约为1000万级别,迁移前,先对源端对象存储做文件list,检查迁移工具list数据与对象存储实际数据能够匹配,然后通过迁移工具做迁移操作,因文件量较大,而且业务每天都有新数据上传,要保证所有文件都正确同步。因此采用的的历史和增量数据同步方案为提前一周做全量迁移,然后通过镜像回源同步新增文件。 割接前一周做全量迁移 1、 在割接一周前,利用京东云的osstransfer迁移工具进行全量迁移。 2、 迁移后会生成一个以源oss的bucket命名的.list.txt的文件,此文件里含用源oss bucket的所有文件的清单。 3、 迁移日志会生成在迁移的工具包log目录下,相关log说明(log文件很重要,迁移完成后做了一个异地备份): 迁移的所有文件将记录在audit-0.log中 迁移成功的文件记录在audit.success中 可以用命令grep “1$” audit-0.log查看迁移失败的文件 用生成的源oss的清单文件列表的txt文件中的文件数量和audit.success文件中的文件数量进行对比,如果数量一致说明全部迁移成功。 文件list获取配置示例: 割接当天进行全量迁移后的增量迁移 1、 利用osstransfer工具生成源oss的清单文件列表。 2、 从文件列表清单中找出全量迁移至增量迁移这段时间内新增加的文件。 3、 开启oss的镜像回源。 4、 使用curl访问新增加的文件(要访问目标端oss),进行新增文件的镜像回源。 实际迁移中遇到了问题: 在POC阶段,做测试环境数据迁移时,采用这个方案验证一切顺利,但是在生产环境割接时,遇到了问题,判断增量文件所需的list清单出现循环错误,导致list任务一直运行中,而list的清单有大量重复内容。 迁移软件版本与测试环境迁移使用的版本一致,而生产环境中,迁移软件在一周前的全量同步的使用也是一切正常。数据也正常同步到了京东云的对象存储中,割接时需要的是通过回源方式获取一周内新增的文件,如果list文件不正确,会导致增量的数据同步无法进行。 问题处理 业务割接时间有限,迅速升级问题,将问题反馈到工具软件的研发同事,研发同事迅速投入排查(已是凌晨,为京东研发同学的敬业精神点个赞)。经过研发同事排查,发现源端的友商云上,测试环境使用的对象存储与生产环境的对象存储位于不同区域(zone),而友商云的生产环境对象存储所在区域的OSS接口在本周做了调整,导致原有工具list出现错误。 研发同事紧急更新一个工具包提供给迁移现场同事,解决了对象存储文件list循环错误问题,顺利完成了文件list检查,通过对比前后生成的list文件,获取到新增的文件列表。配置镜像回源,通过脚本同步了一周的新增文件,校验无误后,配置业务应用启用对象存储,业务启动及验证工作继续正常进行。 四、redis迁移 业务中Redis使用有两种场景,一种是仅作为缓存,不做数据持久化,这种业务场景,迁移后在新环境部署业务后直接调整业务指向新的redis实例即可,一种是有数据持久化,这种业务在迁移到云上时,需要根据业务需求,做redis数据的迁移操作。 Redis有rdb(point-in-time snapshot)和aof两种持久化方案,其中rdb模式是二进制格式,类似于快照,恢复直接覆盖,aof保存的是命令(文本格式),类似于追加模式,如果需要保留目标端的redis的数据,可以使用aof方式,aof方式需要把源端redis做停写操作。Redis加载RDB恢复数据速度快于AOF的方式,但要注意老版本Redis服务不兼容新版RDB格式,因此RDB模式不适用降级的迁移或恢复。 在业务迁移时,需要根据redis的使用场景、源端与目的端版本要求,数据存储、网络条件等选择适用的redis迁移工具。 Rdb及aof的迁移,官方有详细的说明(bgrewriteaof/bgsave/redisdump等),使用也相对简单,因此本文不多做介绍。 京东云研发了redis的迁移工具redissycner(目前支持自建redis业务迁移),通过模拟redis的replication协议,提供redis迁移及同步。 Redissycner通过docker部署方式: git clonehttps://github.com/TraceNature/redissyncer.git 进入目录docker-compose up –d 下载客户端软件:wgethttps://github.com/TraceNature/redissyncercli/releases/download/v0.1.0/redissyncer-cli-0.1.0-linux-amd64.tar.gz 调整配置文件:.config.yaml syncserver:http://x.x.x.x:8080(docker服务地址) token: xxx 注意token文件内容需要在容器中确认。 编辑配置文件后即可启动服务,通过编写要执⾏的任务json来配置操作环境。 { “sourcePassword”: “xxxx”, “sourceRedisAddress”: “10.0.1.101:6379”, “targetRedisAddress”: “10.0.1.102:6379”, “targetPassword”: “xxxx”, “taskName”: “testtask”, “targetRedisVersion”: 4.0, “autostart”: true, “afresh”: true, “batchSize”: 100 } redissyncer-cli -i redissyncer-cli > task create source ./task.json 五、数据备份的重要性 数据备份是在业务迁移的全生命周期怎么强调都不过分的环节(也包括迁移后的一段时期),因数据备份不充分导致数据丢失、业务受损的教训很多,但是,在迁移实施过程中,因忽视数据备份而导致出现问题的事件仍然很常见。 问题可能来自客户,可能来自我们实施团队,也可能来自ISV或者其他可能操作数据的团队或个人。有些问题是因为迁移各个责任方的沟通不充分、宣贯不到位或技术不过关导致,有些是误操作导致。 实际场景中数据备份实施的压力或阻力,主要来自存储空间不足以及备份过程可能造成的对性能的影响。 除了备份的数据文件需要占用存储空间,数据库文件的可用性、一致性验证,同样会占用大量的存储空间(临时),因此在实际迁移过程中,对存储空间的需求,可能会大于现有数据库的数据量的2倍(源端及目标端都是如此)。因此,在重要业务场景中,迁移前,需要对数据备份所需的存储空间做好评估并考虑备份空间的成本。 案例五 某局委办业务由vmware环境迁移到政务云,在迁移前,笔者为客户做了所有迁移主机的整机备份(导出到vmware外部的外部存储中),事实证明这些环节(准备存储环境、沟通vmware运维方、数据导出耗时等)导致的成本增加是值得的。 迁移过程很顺利,在业务迁移到政务云正常服务完成业务交接大约1个月后,接到客户电话,希望能够通过迁移前备份的主机恢复数据。 问题原因 原因是一个ISV在新环境做业务升级时,安排了一个没有经验的新人,把数据库软件做了重新安装,并删除了原有数据。在协助客户通过备份的镜像恢复数据后(历史数据,新增数据部分由ISV做了增补操作),客户购买了政务云提供的灾备服务,开始定期对重要主机和数据做全量及增量备份,通过云上的容灾服务来避免或减少业务错误或误操作造成的损失。 六、业务数据迁移总结 1、提前做好备份,有了备份数据,迁移过程的压力会减小,相对宽松的迁移氛围对迁移实施很有利。 2、迁移技术及工具的选择,现在数据迁移工具越来越多,各个大厂也都有自己的工具,但是产品的限制及兼容程度各有不同,需要根据业务性质选择并验证。 3、准备回退预案,做好POC验证,POC能发现部分问题,提前准备解决方案。 4、做好流程手册,明确操作责任人,联系相关部门做好迁移的切换阶段的护航准备。产品和服务类的问题一定要能找到人支持。 5、明确责任矩阵、进行全面沟通,沟通能够发现技术层面很难发现的问题,越早建立迁移组织并形成有限的沟通机制,对迁移的顺利实施越有利。

优秀的个人博客,低调大师

5G思考 | 适度超前建设5G网络

网络建设是5G商用和业务发展的基石,且投资巨大。网络建设的策略一直是各方关注的焦点,笔者认为5G网络建设“宁可路等车,不能让车等路”,应坚持适度超前原则,同时面向2C和2B建设广域覆盖网络,为应用创新繁荣提供坚实的基础支撑。 首先,从建网节奏看,5G网络建设需坚持适度超前原则,为应用创新繁荣提供高质量信息基础设施支撑。 适度超前的5G网络建设是应用发展的基础,也是应用创新的重要支撑。从网络和应用的关系来看,网络建设适度超前是公共基础设施的普遍特点。一方面,“适度”是指尊重5G技术产品与网络成熟的客观规律。我国是第一批商用5G的国家,既要通过网络建设带动5G技术产业成熟,也要根据技术产业成熟度把握好5G网络发展节奏。另一方面,“超前”是指网络建设是应用发展的基础,优质的网络是商用成功的关键,因此在推动网络发展的实践中,我国确立了“宁可路等车,不能让车等路”的适度超前原则。3G时代的微博、4G时代的短视频等“杀手级”应用大都出现在网络商用后的2至3年,当时网络覆盖已相对完善,为应用创新创造了良好的条件。当前,为保持网络领先优势,有必要在继续保持适度超前的5G网络建设节奏,扩大网络覆盖范围,提升网络供给能力,以高质量供给引领和创造新需求。我国5G商用1年半的时间,建设超过71.8万个5G基站,实现全国所有地级以上城市全覆盖。2021年,我国提出再新建60万个5G基站的目标任务,实现地级以上城市5G网络深度覆盖,这是较为科学和审慎的。 其次,从覆盖范围看,广域覆盖对5G可持续发展和用户感知提升极其重要。 移动通信网络建设,先进行普遍广度覆盖,再深度覆盖优化,不断提升网络覆盖水平,5G也不例外。5G个人用户服务需要广域覆盖的网络,支撑千行百业的数字化应用,同样需要广覆盖、质量良好的5G网络。很多在较广区域开展的2B应用,如智慧城市管理、生态环境监测、5G急救车等,都需要广覆盖的5G网络支撑。在工业领域,也需要广域5G网络来满足智能化生产、网络化协同、个性化定制、服务化延伸和数字化管理为特征的工业互联网需求。 当前5G网络仍在建设初期,仍未达到有效支撑2B2C应用的需求,今年需要继续推动5G网络向市县、重点乡镇的延伸,做好更广更优的覆盖。同时,我国在建设5G广域网络的同时,也要注重针对行业需求,进行精准化网络建设,加快面向行业企业的5G行业虚拟专网建设,为垂直行业和大中小企业提供高效、安全、便捷的解决方案,以更好地服务行业企业客户数字化转型。 再次,从网络部署策略看,坚持精准化集约化建网,持续降低建网成本是5G行稳致远的有力保障。 面向差异化场景需求进行精准化集约化建网,落实共建共享、公共资源开放等多种措施,持续降低5G建网成本成效显著。5G网络建设初期投资较大,但也要看到,通信与交通、市政等跨行业基础设施资源的共建共享,以及正在推进的偏远地区5G异网漫游试点等政策举措,都会推动持续降低5G建网成本。比如,过去一年多来中国电信和中国联通共建共享5G基站36万个,节约建设成本超过700亿元。中国移动和中国广电也正在进行5G建设合作,共建共享700MHz 5G网络。但同时也要认识到,由于5G基站的大带宽配置、大规模天线的应用和更强的计算能力,5G基站功耗相较于4G更高,相应地带来一定程度维护成本的增加,网络运营管理还不够智能化。下一步需要推动行业企业加快5G设备低功耗关键技术工程化攻关,降低单设备能耗。此外,还要充分利用人工智能、自动化网络运营等创新技术对5G设备统一监控,进行能源智能管理优化,通过精细化管理提升能耗利用水平。 综上,我国要继续坚持适度超前原则,广域网络与行业专网相结合,稳步推进5G网络建设,持续优化建网策略、运营策略和政策环境,降低全网的部署成本与运营成本,不断优化投入产出比,积极培育5G融合应用,加快形成“以建促用、建用结合”的良性发展模式。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册