Ruby Conf China 2023 参会笔记 Day 1
Takeaways from Ruby Conf China 2023 Day 1
上周末(2023年8月19-20日),Ruby Conf China 在上海成功举办。这也算是 Covid-19 以来,第一次在线下举办Ruby Conf —— 大家等待了三年之久。非常奇妙的是,会场就是三年前为 Ruby Conf 2021 订下的会场(明天广场 JW 万豪);那次由于疫情问题,不得不改为线上会议。酒店方面还是比较厚道,三年后并没有在会场和餐食方面涨价。顺便一说,万豪轩的自助餐真的很不错。
我打算用两篇文章,简单记录下我在 Ruby Conf 上的学习心得。
主题演讲
by Matz
历史:
Ruby 是一种为兴趣而生的语言。
产品(包括编程语言)的命名很重要,因为它反映了产品的本质。
Ruby 之所以流行起来,要归功于利益追求者(Benifit Seekers)和社区。
营销(Marketing)对于让人们了解一款软件有多好非常重要。
兼容性:
- 社区在 Ruby 1.8 和 1.9 之间分裂了大约 5 年
- 其他语言可能存在更长的分裂期
- 性能提升足以鼓励用户升级
领导力与远见:通过实践使未来发生(例如,是否使用静态类型)
玩转 AST,打造自己的代码分析和代码重写工具
by 黄志敏
Ruby 源代码 → AST
- 分词: Ripper
- 解析: Parser / RubyParser
- 编译
利用 AST 的工具示例:
- Rubocop (Parser)
- Prettier for Ruby (Ripper)
- Yard (Ripper)
- Brakeman (RubyParser)
用例:
- rails_best_practices
- https://synvert.net/ 可以帮助替换和重构代码
使用 Synvert 查询和更改 AST 节点的示例:
# 将 "email_and_active(email, true)" 转换为 "email: email, active: true"
helper_method :dynamic_finder_too_hash do |prefix|
# ...
end
if_gem 'rails', ">= 3.0"
within_files Synvert::ALL_RUBY_FILES + Synvert::ALL_RAKE_FILES do
# find_all_by_email_and_active(email, true) => where(email: email, active: true)
find_node '.send[message=~/^find_all_by_/]' do
hash_params = dynamic_finder_too_hash('find_all_by_')
if hash_params
replace :message, with: 'where'
replace :arguments, with: hash_params
end
end
Rails ActionCable 的性能压测与实战经验分享
by 李亚飞 (ShowMeBug)
问题:我们能支持多少在线用户?
ActionCable 组件: WebSocket, Channel, Connection
监测:
- websocket: Jmeter, Artillery
- server: atop, netstat, puma state, nginx log,isostat
- Alternative: AnyCable - 提升了初始连接速率,但消化速率没有上升;适合于⼤量链接,但⽆需很强消化QPS的场景
性能: It handles 70 QPS with 4-Core and 8G Mem, namely 20k DAU
通常的瓶颈:
- SSD: 3000 IOps
- Middle-leveled DB: 20k TPS
- Redis: 50k TPS
- IO latency: 0.1 ms(write) - 1ms (local DB) - 10ms (Redis R/W)
Rails 应用安全与 rack - security
by 李玮
如何确保应用程序安全
- 通过培训提高安全意识,避免网络钓鱼和社交工程
- 通过攻击面(ASM)了解网络资产的安全性
- 通过 BAS(漏洞和攻击模拟)持续评估有效性
- 采纳建议
OWASP归纳的安全问题:
- 2021 年的前三名: 访问控制破坏、加密失败、注入
- 注入不再是最严重的问题(2017 年曾经是第一名),因为人们持续关注和修复
- 新问题: SSRF(服务器端请求伪造)
Rails 强项
- 防注入
- 避免 XSS
- 凭证/加密
- 安全认证
- 约定大于配置
Rails 弱项
- 第三方 gem 的安全性
- RESTful - 易于遍历数据并暴露数据库结构
- 用完整的对象去 render view,存在不必要的数据
常用工具:
- brakeman
- metasploit (a penetration testing framework, written by Ruby)
- Burp Suite (security testing software)
加固 Rails 应用程序
- 浏览器端环境验证
- 客户端-服务器双向验证
- 动态混淆,防止请求伪造和窃听
- 动态令牌
- 应不干扰现有应用程序(例如,使用 Rack 中间件)
浅析领域驱动设计在极狐 (GitLab) 的技术实践
by 袁晓峰 (GitLab)
DDD的典型架构:
- Presentation
- Application
- Domain
- Infra
将 DDD(的教条)强加于 Rails 的影响:
- 与官方 Rails 不兼容,不易升级
- 代码质量差
- 学习曲线,造成人力资源浪费
在Rails中更实用的方法:
- 不区分Presentation和Application
- Contoller可直接访问Model
- Service作为领域模型
- 丰富的领域模型,而不是胖模型
- 使用 Concern
- 委托给 Plain Ruby Object
Conversational Al 赋能下一代互联网应用
by 王若愚 (Workstream)
背景介绍
- 对话式人工智能重塑人机交互:从图形用户界面(GUI)到自然语言用户界面(LUI)
- GPT 的瓶颈:幻觉(Hallucianation)、难以测试/质量保证、数据隐私
中型企业的落地方案
- 从一个痛点或特定场景入手
- 人工智能代理作为大脑 + 应用程序接口作为四肢
- 聊天: 识别用户意图,利用提取的参数调用现有 API
挑战
- 权限 - 用户可能会询问他无权访问的信息
安全性 - 提示注入/攻击