分类 随想 下的文章

interview-blog-21-0702.png
近期借一位业内朋友推荐,面试了一家位于新加坡的互联网企业,同样记录面试过程
一面(远程):
业务线运维负责人,是一位年轻女士,在问明不需要露脸后开始。从自我介绍到了解的技术栈,擅长的方向,排错问题等。问到“擅长的方向”时,忽然一愣,眼瞅也是17年的老运维人了,但还真没觉得擅长什么。只能说阶段性的尝试过一些新技术,23年至今,甚至有点不务正业,可以不负责任的说,“运维里最了解大模型的,大模型里最了解运维”的复合型人才:) 接触越多也愈发觉得知之甚少,这也是我在简历中不敢用“精通”二字。收回来,讲了几个模型应用的实际案例

  • 微信聊天记录微调chatGLM
  • Voice2SQL
  • 智能运维机器人

23年以前,容器、网格、网关的落地、使用过程,举了几个排错。提到当前基础设施情况,使用了terraform,交流了优势和建议做法,terraform结合ansible快速拉起。在容器编排有更好的解法Cluster Autoscaler叠加Horizontal Pod Autoscaler。面试官最后礼貌的问了薪资,并贴心的补充可以不回答,基于信任,如实告知,一面结束,面试官准时,用时45分钟

二面(远程):
跨团队面试,一位男士,可能负责研发,同样的过程,自我介绍到过往经历。分享了几个经典、复杂的排错案例,也都是博客的历史文章。着重问了CDN厂商的从业经历,简历外有无其他经验,以往离开的原因等。二面结束,面试官因为凌晨处理故障到5点,迟到半小时,表示理解,实际用时49分钟

- 阅读剩余部分 -

    最近在看大模型和运维行业的关联,初步想法是标记监控数据,配合混沌工程,给出故障数据进行多元线性回归,根据最佳曲线来预测故障。实际进行过程中发现困难重重,还在尝试标记数据。
    最近有个很火的词儿叫“数字孪生”,又叫数字骨灰盒:),大意是通过大量的文字痕迹训练已有模型,让模型从“扮演”到“重塑”你。受启发于 https://greatdk.com/1908.html,并做了些许优化,效果还是挺好玩的,或许这才是数字世界的你?!😄

看疗效
微调前1.jpg微调前2.jpg!微调.jpg
思路步骤:

  • 使用wechatExporter导出微信聊天记录,纯文本格式
  • 手动挑选适合训练的数据,对聊天记录众多的群聊进行排除
  • 自动数据清洗,合并聊天记录,记录历史
  • 使用ChatGLM2进行微调、推演
  • 启动web_demo就可以体验了😄

优化项目:

  • 兼容一问一答外,大多数人的聊天习惯是连续发出多条信息,当然我们回消息也可能是多条。比如张三问,1明天有空没? 2我想找你喝点 3别带媳妇,我回复:1有呀 2必须喝白的 3当然不带 4哈哈哈。我做了合并最终效果,
    {"prompt": "明天有空没?,我想找你喝点,别带媳妇", "response": "有呀,必须喝白的,当然不带,哈哈哈", "history": []}
  • 保留历史会话,沟通都是有上下文的,我这里简单粗暴的认为当天的会话都有关联,记录在history中
    {"prompt": "我去找你?", "response": "你开车了没", "history": [["?", "?"], ["忙完了", "怎么说"], ["吃饭打台球?", "行"]]}

python清洗脚本

import os
import re
import json

# 定义源文件夹和目标文件
source_folder = '/Users/jixing/Downloads/wechat_history'
output_file_path = '/Users/jixing/Downloads/0811output.txt'


# Regular expression patterns for extracting dates, usernames, and messages
date_pattern = re.compile(r"\((\d{4}-\d{2}-\d{2}) \d{2}:\d{2}:\d{2}\)")
user_msg_pattern = re.compile(r"^(.+?) \(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\):(.+)$")

# 遍历文件夹中的所有.txt文件
for filename in os.listdir(source_folder):
    if filename.endswith('.txt'):
        with open(os.path.join(source_folder, filename), 'r', encoding='utf-8') as source_file:
            content = source_file.readlines()

            # Parsing the chat data
            conversations = []
            current_date = None
            current_convo = []
            for line in content:
                # Check for date
                date_match = date_pattern.search(line)
                if date_match:
                    date = date_match.group(1)
                    if current_date != date and current_convo:
                        conversations.append(current_convo)
                        current_convo = []
                    current_date = date

                # Extracting user and message
                user_msg_match = user_msg_pattern.match(line)
                if user_msg_match:
                    user, msg = user_msg_match.groups()
                    if current_convo and current_convo[-1][0] == user:
                        current_convo[-1][5] += f",{msg.strip()}"
                    else:
                        current_convo.append([user, msg.strip()])

            # Adding the last conversation if any
            if current_convo:
                conversations.append(current_convo)

            # Formatting conversations
            adjusted_conversations = []
            for convo in conversations:
                history = []
                for i in range(0, len(convo) - 1, 2):  # Increment by 2 to ensure one question and one answer
                    prompt = convo[i][6]
                    response = convo[i + 1][7] if i + 1 < len(convo) else None
                    if response:  # Only add to the list if there's a response
                        adjusted_conversations.append({
                            "prompt": prompt,
                            "response": response,
                            "history": history.copy()
                        })
                        history.append([prompt, response])

            # Appending the results to output.txt, one object per line
            with open(output_file_path, 'a', encoding='utf-8') as output_file:
                for convo in adjusted_conversations:
                    json.dump(convo, output_file, ensure_ascii=False)
                    output_file.write('\n')

清洗后数据,可以看到已经有非常完整的逻辑关系了
cleaned_data.jpg

我在训练时使用了70%的训练集,30%作为测试集。3000条数据在我的2080显卡需要10小时!都去试试看效果吧:)

疫情在家一个月了,记录一下

  1. api网关调研,测了限流、认证、更改返回内容等插件,就是简化的nginx,以往改配置文件的事,现在应用插件。https://www.yuque.com/books/share/44e4c02e-5ffb-43cc-ab51-ac2bf885913a/ssrwps
  2. apisix初体验,看到腾讯内部有些业务使用,从他们测试结果来看性能有较大提升,而且是apache基金会项目,不至于烂尾
  3. 18年搞的运维系统做了部分功能迭代,升级到django4.0。登录功能从装饰器改为中间件,搞清楚了ModelForm。深觉自己不太适合开发,不能静下心思搞
  4. excalidraw神器,用够了一板一眼的visio,返璞归真。附一张成品

全球化+WPS图片打印.jpg

  • 无神论者
    我是一个坚定的唯物主义者,直到来图书馆,面对一个个空位,旁边的碳基生物(存疑)都说有人!见鬼
  • 文化差异

    一副人行道上的镶嵌画。描绘的是年轻的许拉斯(Hylas)被仙女绑架,因为当她们看到他从泉水里取水时,便爱上了他

    将自己敬重、喜爱的神镶嵌在人行道,天天被人“踩踏”。

xiangqianhua.jpg

又是一个在图书馆“消磨”的上午,昨晚追了B站的“房车旅行生活”,缓了一晚上才从梦中走出来,羡慕当今有想法的年轻人,敢于在人生的上半段选择,看着他们在自媒体从业、创业、裸辞、购车、改装、出发种种,心中的小火苗被勾的险些着起来。
回归现实,到图书馆十点,想看的基本技术类书籍都找不到,翻到贺嘉的《表达力》,摘几段有意思的

消除演讲紧张的12种方法(入门),演讲前紧张,大家只会说深呼吸,收获的回复就可能像女朋友不舒服时“多喝热水”得到的反馈一样,只有慢慢的白眼。。。

  • 上台前

    1. 准备-准备-充分准备
    2. 试讲至少3遍,提前到现场彩排
    3. 充分的睡眠
    4. 在现场听众中提前认识一些朋友,起码在冷场时有他们和你互动
    5. 和亲戚朋友打个电话,聊聊接下来的演讲。和熟人谈论演讲内容能让自己情绪放松
    6. 在厕所里,对自己说“我是最棒的”,充分的心理暗示
  • 上台后

    1. 把观众想成冬瓜
    2. 目光看向稍远处,不直视听众
    3. 双手叉腰2分钟。这个肢体动作可以帮助我们提高激素分泌,帮我们更好的消除紧张感
    4. 紧张的时候喝口水,用这个时间想词。带瓶水
    5. 通过发气泡音来放松自己的心情。啥是气泡音特意查了下,打哈欠时像青蛙一个个吐出的声,存疑,这有啥用
    6. 带一个熟悉的道具。比如遥控笔、穿一套最好看的西装

我加了一条,不要把自己放在被评价的位置,重视的前提下爱咋咋,首先要对自己肯定!不断的给自己暗示,大家都是芸芸众生,除了你自己,不会有人记得你的演讲。不要和自己过不去。

《2002年的第一场雪》已经是20年前的歌了,还真挺让人意外的。小朋友2岁半了,从一出生的惊喜、无感、逃避、苦闷、烦恼、和解、欣喜、期盼,体会了当父亲的不易与责任。
由于工作的关系,每天到家都20:00以后了,吃个热乎饭(在这要感谢我丈母娘,帮我带娃还负责一家人晚上的伙食),陪小朋友玩1小时,给他讲故事,有时还不爱听我讲,必须找妈妈。我太太在教育方面还是非常用心,给娃清淡饮食,不抱自然睡习惯 - -。小朋友各种翻腾、找借口,用着仅会的几个词:“楼上吵”“妈妈抱”折腾到十点半,有时甚至十一点。

  • 11月时,有位国内著名网站的实习编辑,预约我做一些运维自动化课程,我还是比较怀疑的,大牛、专职老师多的是,找我这玩票儿的干啥,随口说要到12月底,没想到对方一口答应了。定了个友情价,网签合同了。要求以平台名义、格式发出,在创作上有点影响,好在只是PPT和课题的要求,大纲没有做过多干涉。录制的时候也是状况频出,麦克风收音太好,小朋友不睡的咿咿呀呀声,楼上厕所洗漱声(吐槽一下老房子的楼板太薄,隔音性差强人意)外加我还不太会剪辑,妄图一遍过,课程短一点还行,长的课程最后收尾阶段,“哇哇一嗓子”全给我干废。看到小朋友又不忍心训,又趁机进去摸摸他,趁机玩他喜欢的我“哼”他“哈”的游戏。也就学乖了,一小节一小节录。哪怕这样,搞到凌晨1点2点时常态,不知道哪来的动力。熬了一周左右,课程通过审核,发布。完成了“云账户”注册,看起来这玩意专门给IT工作者准备的,大概意思是自己注册成个体户,扣税比例很低,同时不影响薪资的扣税额度。giftcard.jpeg
  • 今年的专升本也完成了,还被评为“优秀毕业生”,只是正常完成了练习、课程、毕设自己写。答辩时有个事快赶上段子了,前面哥们的课题大致是“大数据”方面的,老师问到数据来源,说是公司内部机密- -,给老师整懵逼了,自然没给过。
  • 和前同事打赌软考中级,花了不少精力把近十年的真题刷了遍,最后还把选择题当简答题写完了,分数还行,同行的张总没过,这211水货:),当时还约定的谁没过请吃饭。回头想我这一年过的还是很充实的⛽️

22年给自己定两个目标,首先是在口语上要进步,不能再哑巴英语。去年的目标完成度一般,起码阅读英文文档障碍不大。基本每天都能坚持15个单词,百词斩中《专升本》程度已经完成(顺便说一下,我也是以优异的成绩考上了大专:)相应的,职场软技能也要提升;其次,在技术层面也要投精力,暂定的课题是API网关相关,输出文档或者课程。
就俩吧,工作已经很忙了!与君共勉

忙起来了,沉迷在组织架构升级,对业务支撑。明年的部门规划、预算
早上和产品总监聊了支付业务,这位同学有着非常丰富的创业经历,中途遇到的问题也非常有共鸣,本来是就框架略微展开。最后提了嘴安全,聊到了他在支付行业创业中动了其他厂商的蛋糕,被ddos、CC,被用户要求赔款,在这块非常有感受。我也就以前遇到的相同经历,被刷短信接口、社工、甚至被拖库。安全不能仅靠运维,业务侧的审计日志、安全开发都要跟上,难得能和非技术人员聊到这儿,第一位!
非常欣慰!

产品经理反馈海外某地工厂停工,原因是产线有道环节是设备开机上传key至加密机。经与研发沟通后,链路:客户-CDN-源站api-上海机房加密机。头天凌晨2点出的问题,销售同学帮挡了一道。
第二天上班看了源站日志,下意识以为CDN问题,更换两次节点后,客户反馈仍有问题,视频里桌子上一排商米设备,国内15秒激活,这里要1分钟,还有超时。客户的极度不配合加上已经是半夜1点,群里的产品经理不断催促、强调问题严重性,心烦意乱,还要和他battle。
查看日志,没一条非200的。判断用户网络到CDN间的问题,直接去掉CDN回源

事后产品追着大家要长短解,
我:缩短网络距离,智能解析切换CDN、激活服务就近部署
深圳研发:传key动作后置,不在生产环节做,牺牲一部分设备掌控性
大家畅所欲言时,被批评 “不专业、开会效率低,应该只提痛点,专业的事交给专业的人,不要替其他人做决定!”
CTO:加密机批量生成sn、key对应关系,保存在当地IDC,异步申请key,不再怕弱网、间歇被墙

高下立判,我深陷“知识的诅咒”,完全从自己的视角出发;研发多少带了业务场景,用较低的售后成本避开问题;CTO则结合了技术与业务,创新性的引入“异步前置仓”

优势:
对网络轻车熟路,日志、变量因素,发现多项关键线索,快速定位

反思:
容易被情绪左右,对待“刷存在感”的同学不能无视
还是缺乏系统性思考,只能站在技术的狭小角度

混沌工程(Chaos Engineering)到底是啥?

现实世界比demo更复杂,系统的正常运行需要网络、存储、虚拟化层、OS、中间件、数据、应用的多项配合,每天都会遇到各式各样的故障,这些真实世界的故障信息就是最好的混沌工程变量。
我认为的混沌工程,和安全领域的零信任颇为类似,无论处于网络边界之内或之外,都不应该自动信任任何事务。任何组件都有发生故障的可能。

混沌工程是测试工作的超集,虽然混沌工程和传统测试通常会有很多共性,比如都使用“错误注入故障注入”,测试是使用测试工具都某块进行测试,混沌工程更像实验,通过不断模拟故障,观察系统的”反应”,追求在真实环境中演练。
在真实世界中,常见的故障:
硬件,硬盘老化、电源掉电、内存ECC等
网络,延迟、丢包、阻断等
系统,资源耗尽、内核bug等
拜占庭错误,集群脑裂、影响选举制度等
上下游服务故障,比如三方接口故障、服务循环依赖等

没必要对所有的风险点进行测试,要考虑故障比例,把较为频繁的故障列为第一优先级。比如没必要测试内网间的延时、OSS的文件损坏、SLB的转发失效等,应该模拟自身服务调用延迟、依赖厂商的支付接口、外部被墙等,这样的模拟是非常有效果。

接下来是争议最大的部分,混沌工程追求在生产环境模拟,大部分厂商是没魄力的,传说网飞就很猛,有自信直接停掉aws的一个可用区(个人觉得夸张)。常见的做法是录制线上流量,成倍数、倍速回放到测试环境、或者在金丝雀环境。失效也仅影响一小部分用户。btw,阿里云的AHAS年初已经正式版,全自动的故障模拟,包装了大部分复杂度👍🏻

给自己定个OKR,下半年把以往做过的故障注入、流量管理串起来形成文字💪🏻

回顾近期的一些想法
1.“挖洞有奖”,提供入口给外部黑客报告bug,提供奖励
公司没有投入安全,应该是要等到故障后才能重视,投入。
大厂都有挖洞有奖,下面链接是谷歌在过去10年,它一共向11,055个软件漏洞,支付了29,357,516美元的奖金,平均每个漏洞2656美元(约1.8万元人民币),共有84个国家的2,022名程序员拿到奖励。
这其实非常划算,一年费用不到300万美元,就能发现1000多个漏洞。如果其中任何一个漏洞被人利用,对谷歌造成的损失,可能都远远大于这个数字。
这就是为什么大型软件公司都悬赏开发者,向它报告软件漏洞。
https://security.googleblog.com/2021/07/a-new-chapter-for-googles-vulnerability.html
2.对部门的教育激励,属于公司首例,申请了8K的培训经费。用于购买书籍,考试通过发放现金奖励
3.内部钓鱼系统,由IT同学发送🎣邮件,看谁中招
4.IT监控大屏

在商米也两年了,运维工作也理顺了。随着接手IT部,责任和压力一并来了。
前几个月,更新过一波猎聘(纯纯个人习惯,并不是干的不开心),简历也一直处于“不找工作”状态。有几个猎头还是推荐了几个有意思的职位,记录一下
一.初创公司运维负责人,组建团队,汇报对象CTO。
对运维的理解,怎么做运维体系,CTO对运维系统执念颇深。我从业务层和他讲起,大意是运维不能只做基础的维护工作,也没有一招鲜式的银弹。我对初创公司搞运维系统持反对意见。
1.初创期间,我们图快,这时候更应该走敏捷提高效率,CICD上多花点心思,让大家的编码能够尽快可能流畅的上线
2.指定符合当前的规范,比如根据业务天然分库,使用各自独立的库账号,分支规范、配置中心、监控等
头开好再去搞体系化,当然前两条也属于。搞更加深入的体系化
最终CTO认为对他公司意向性不强。无下文了
总结:时长40分钟,准备不够充分,紧张,表达不够简练,啰嗦

二.猪厂,近期没落了,某游戏块的运维负责人
问题大同小异,同样没怎么问技术问题,可能我的简历偏技术,没空话套话黑话。问了些容器、网格的问题,分享了几个典型的排错场景,从沟通来看,对方起码这块的技术是缺失的。问了些管理类、当前的优劣势,面试官是此项目负责人。态度亲切
总结:视频面一小时,仍然有点“怯场”,可能习惯了大厂的光环。觉得大厂如何如何牛逼。同样,发挥一般,自身的亮点没讲出来

三.鹅厂,云原生架构师,不涉及管理,有点像运维专家、顾问类,干活,解决难题的
这次就非常正规了
1.一面视频面,应该是同组的人,估计没看我简历,问了些怎么确保在跨云迁移中数据一致性问题,包含mysql、redis,这块我没答好。容器网格技术初级,没问到什么关键点。全程我开视频,看对方没开,感觉有点不爽,半小时结束。 结束后我还小吐槽一波“明显没看我简历,jd中提到的容器简单问了两项,感觉没受到尊重”给猎头
2.没想到第二天受到了通过短信,深圳的号码约我二面,很快收到短信,还是视频面,都约的很晚。这次的同学主要给我讲了工作内容,不过我没太听进去,琢磨问题去了。简单问了我卖课的经历。面试时间也很快 半小时。我直接问,你觉得我有哪些不足的地方,对方回:“你太想知道答案了”,结束
3.心里是有感觉的,马上收到了“通道面试”邀请,这次的面试官更像研发,追问了一些容器和具体排错案例,我已经明显放开了,准备的也更充分了,好像讲述职一样,洋洋洒洒聊了一小时(PS:这位同学迟到很久,不断的道歉说互联网人要理解,有个紧急的会议冲突了,让我来了也有个心理准备,要加班到很晚- -,我在想和我个面试者说这个不怕吓走吗)由于我已经说的放飞自我,基本没啥问题能难得住我了。面试官必须得上hard了,
“父进程和子进程读取的内存内容是否一致?” 直言不会
“简述tcp3次握手过程?” 大概记得,描述个大概
“1亿个乱序整数,怎么最快取最小的前100个?” 就知道排序有个分治法,切分成很多组。当然我不是研发,这块没深究,就说不会了
确认是研发同学了,当然面试官必须不能让面试者全答对,表示理解
4.收到终面邀请,主动开视频的,我也开了,就十分钟,应该是这条线的leader,问了我为啥两年一换,我也直言,感觉没挑战,坑排完了,薪资没跟上。说我太简略。我还是围绕这个展开,一共10来分钟
如果过,可能有hr来聊薪资,不过就当历练。偶尔被猎头推着面试也是个锻炼过程,未完待续

update:收到offer,职级比预期的低,但总包的薪酬还可以。最终各种原因,当前的领导对我还是很信任。婉拒

作为一个从事运维工作十多年的“行业老人”,深感技术的进步是令人激动的,甚至惶恐的。从传统自建机房、配置基础服务、网络,拥抱开源,到2014年云厂商发力,其中阿里云一年经历6次降价,哪怕当时的云厂商稳定性堪忧,彻底使“上云”成了主旋律。革了传统运维的命,淘汰掉一批底层技术人员。技术“耐久度”越来越短,近期的云原生、AI、大数据技术,使运维能从传统运维到当下的业务运维再到数字化运维,从而不断探索运维的的价值。

转型一、运维的研发化。让运维人员进行研发,人创造机器,再由机器取代人来做维护,这个落地就是DevOps,基于显性化的运维能力,各个专业领域都要自治。

转型二、运营的数字化。从故障的发现、定位到处置操作,要做到感知的泛在化、认知的智能化和操作的无人化(这就是AIOps的落地)。

  • 手动时代,标准化 弊端:人手一套脚本,功能单一,无法传承,无法应对大规模
  • 自动化时代,逐步成体系,沉淀出部分方法论,可能有运维系统,DevOps、ChatOps逐步落地,有着仅适用于本企业的运维系统。把人训练为机器
  • 智能时代?

聊AIOps前,包括我自己,都有困惑。把机器训练成人,再淘汰掉人?

    - AIOps是不是伪命题、炒概念,

    - “有人说运维转型势在必行,技术、规模升维带来的问题和挑战只能用技术能力发展解决,一定要用机器解决机器的问题”

    - “很难形成体系的AiOps‘银弹’,最大的问题,训练数据源”

    - “AIOps 的核心主要集中在数据算法、机器学习技术方面。不止运维专家要了解业务架构,负责平台研发,决策分析的闭环执行;更需要AI算法专家对比方、层次聚类、随机森林、时序数据分解、DNN、RNN 等算法方面的技能,所以一个完整的 AIOps 实践需要多团队 & 技能协同运营等相关多维度能力要求。一个完整的 AIOps team 会是需要一个多方面综合技术能力的集中“


企业转型AIOps,对”顶端“以下的运维伙伴都会带来致命冲击,配置变更、环境部署升级、性能分析、troubleshooting,可以被分析、处理、治愈、训练,以前只有人能做的”决策“动作也会被机器算法取代。我们不是在想象《黑客帝国》中的剧情,AI已在围棋、星际争霸大幅领先人类。趋势就是这样,我相信在短时间内,AI只能呈现选项供人决策,不断学习后最终自己完成闭环。

关键字:混沌

想解决某台服务器的安全问题,却触发了以往的配置的bug,导致生产事故,被追责。执行人觉得很冤枉。

这个世界的运行,并不是最优状态,只是在各种因素下产生的平衡,这本身也是种”精妙”的设计。这时,“局部”的对策比问题本身更糟糕。

要能理解、认同这一状态

这时,就要引入系统性思考了,那什么是系统性思考

站在高点,看见整体。当你站在地面时发现有河流、山丘、峡谷,坑洼不平,当你在大气层以外,发现地球已经变成光滑的球体。做技术,不能只做技术

理清关系,我们要看的,不只是系统中的元素,更要理解其中的关系。比如一个常见的例子,小公司往往发展到一定阶段,想要引入大厂高P同学,妄图用飞机引擎带动一辆汽车。没有理解,高P同学只有在大厂这个完整的体系下才能发挥作用,要把目光拉到一个整体,从系统的角度去改善

系统性思维是一种变化的视角。你所做的每件事,都在持续影响结果,而且是多个结果。比如你努力工作,得到晋升,薪资职级得到调整,面临更大责任,不得不利用加班时间学习,陪伴家人的时间减少,导致妻子对你心生不满,你却觉得冤枉,家庭关系出现矛盾,幸福感反而下降


前两天看到个段子,怎么区分一个运维同学是否资深。普通运维接到需求时:”很简单,直接用A方法,半天搞定”

资深运维:“为什么这么做,需求上下文都告诉我。这事我预计有ABCDE这五个变量,还不包含未知变量,结合我手头的优先级,一周时间。并且其他方法有”
未完