语雀桌面端技术架构实践

作者:易芝林(维骏)
语雀桌面端作为语雀为用户提供的生产力工具,上线两年多来一直保持高频的迭代和健康的业务增长 。本次主要介绍我们在做桌面端时的一些技术架构思考和实践,同时也将分享我们沉淀的一些通用桌面应用解决方案和经验 。

语雀桌面端技术架构实践

文章插图
 
文章会分为四部分,首先会简单介绍语雀桌面端,然后介绍当前语雀桌面端的应用架构以及关键点,之后介绍架构中的几个架构重点项,最后在进行总结 。
语雀桌面端介绍
语雀是孵化自蚂蚁体验技术部的一款笔记与文档知识库工具 。我们在两年前,针对语雀用户特点,以及后续发展策略,旨在为创作者提供更好的创作体验,推出语雀桌面客户端 。
语雀桌面端技术架构实践

文章插图
 
相较于现有浏览器提供的产品服务而言,我们提供的桌面端产品主要考虑以下几点:
 
  • 无干扰 :给用户一个沉浸式的创作体验,而不像浏览器有其他窗口、tab 进行干扰,以及用完即走的用户心智 。
  • 系统级常驻 :打开速度更快,可以一键启动或者利用各类快捷工具唤起 。
  • 集成更多操作系统能力 :提升创作效率的多窗口、系统菜单和快捷键、对文件读写、与系统软件集成等 。
  • 离线 :期望能在离线或弱网的情况下,无障碍的进行创作 。
 
语雀桌面端技术架构实践

文章插图
 
桌面端架构概览
语雀桌面端技术架构实践

文章插图
 
研发测主要分为左边三层,最底层是语雀的基础设施,依赖了语雀后台提供或封装的大量云服务,以及底层依赖的安全能力和存储模块 。
中间一层是比较偏应用架构的一些能力封装,上面是代码层面用的的辅助能力,还有主进程的模块,然后有给应用提供的一些管理能力和一些跟 UI 相关的功能模块,最上层就是基于底层架构搭建的业务应用 。包括桌面端应用比较核心的几个模块,以及一些由子应用方式承接的业务模块(后面也会详细介绍子应用这个概念)
同时最右侧也有很多辅助研发的依赖能力,来完成语雀桌面端的发布、质量和稳定性管理 。
架构概览 - 关键点
相比较普通 web 应用来说,我们觉得桌面端有以下几个能力比较重要:包括安全、软件升级、以及桌面端通用的的基础能力:
语雀桌面端技术架构实践

文章插图
 
架构概览 - 安全
安全是一个生产力工具软件的生命线,特别是语雀作为一款知识管理工具,对于安全是非常看重 。
基础安全
  • 下载安装包时,需要有安全管理机制,避免下载过程中被恶意替换;
  • 升级到最新的 Electron 版本(语雀目前紧跟官方大版本,同时也会参考微软的头部应用 (vscode),避免有没考虑到的场景;
  • 同时用户离线下载到本地的文件,包括图片,附件等,也需要经过加密 。
启动安全
  • 杀毒软件:启动安全主要是在启动软件时的一些安全问题,例如二进制模块是否有加签名,避免被杀毒软件查杀导致无法启动,也可以联系安全厂商加白名单,同时还能提升启动速度 。
  • 禁止调试:因为软件代码都会下载到客户端,可以禁止软件在客户端浏览器进行调试 。
  • 数据库秘钥管理:本地数据库文件需要保证即使被恶意拿到,也要保证无法查看到里面的内容 。我们通过生成内存安全级别的方案,确保其他非当前电脑的语雀软件即使拿到数据库文件后也无法打开 。
应用安全