avatar
Articles
40
Tags
37
Categories
0

Utopian

Utopian

Cache In Next.js
Created2024-03-25
next.js的缓存机制前段时间在使用next.js搭建个人博客的时候遇到了一些性能上的问题,最早的实现使用prisma+postgres自己实现了数据缓存。后来发现在部署到生产环境以后效果并不理想,因为云端缓存跟本地的环境还是有差距,无法保障next后台和pg的时延,此外就是缓存过期时从notion取数据会有明显的卡顿,也没有找到xian后来看了了next的文档,发现其已经提供了不少缓存解决方案,降低对后台数据源的实时依赖。虽然有了一些内存上的上涨以及透明度上的隐患,但是相对自己去实现可能会更加合适。 本文重点介绍next.js的几种缓存机制。 简介next.js的缓存机制实现比较复杂,可以分为多层,重点包括: Router-Cache: 客户端(浏览器)上的缓存,主要目的是通过预拉取、缓存RSCP等减少客户端等待耗时。 Full Route Cache:服务端的渲染结果缓存,目的是减少静态路由的重复渲染。对于页面无变化的场景适用 React-Cache / Request-Memorization:对同一次(页面渲染)请求时多次拉取同一数据源的缓存,既能减少同一次渲 ...
Introduct to NotionAPI
Created2024-01-06
Notion API 介绍Notion的页面组织结构非常灵活,但是一直没有找到相关介绍,最近了解到一个使用Notion作为后台CMS的项目,浏览了一下源码和Notion API。通过API也能大致了解下官方开放的能力以及相关数据结构。 pages page内容主要由两部分构成 page properties 指定page的基础信息,基础数据结构详见文档,包括: type Page struct { Object ObjectType `json:"object"` ID ObjectID `json:"id"` CreatedTime time.Time `json:"created_time"` LastEditedTime time.Time `json:"last_edited_time"` CreatedBy User `json:"created_by,omitempty"` ...
Architecture of Supabase
Created2023-12-28
supabase 整体架构分析Firebase是一家典型的BaaS公司,它可以帮助手机以及网页应用的开发者轻松构建App。通过Firebase的框架就可以简单地开发一个App,无需服务器以及基础设施,简单来说,它就是一整套的解决方案。Supabase 是一个开源的 Firebase 替代方案。官方表示,其正在使用企业级开源工具构建 Firebase 的功能。Supabase 可以:• 监听数据库的变化。• 查询你的表,包括过滤、分页和深度嵌套关系(如GraphQL)。• 创建、更新和删除行。• 管理你的用户和他们的权限。• 使用一个简单的用户界面与你的数据库进行交互 本文通过从本地部署方案大致分析其整体架构。 简介Supabase的定位为Firebase的开源替代,围绕 PostgreSQL 组合了一系列的开源工具,用以实现 BaaS 所需的用户认证、实时数据库、对象存储、RESTAPI 接口等功能。在整合这些工具的同时,为开发者封装了统一的 SDK,方便开发者以统一的方式调用这些能力。官方提供了 JavaScript 和 Flutter 的 SDK,社区贡献了 Python、C ...
Introduct-to-nocoDB
Created2023-12-08
nocoDB 体验本地安装体验了一把nocoDB,总体感觉功能挺丰富。既适合作为headerless CMS使用,也适合作为数据展示、编辑终端,官网描述的主要特点: 丰富的电子表格界面 ⚡ 基本操作:创建、读取、更新和删除表、列和行 ⚡ 字段操作:排序、过滤、隐藏/取消隐藏列 ⚡ 多种视图类型:网格(默认)、图库、表单视图和看板视图 ⚡ 查看权限类型:协作视图和锁定视图 ⚡ 共享基础/视图:公共或私有(受密码保护) ⚡ 变体单元格类型:ID、LinkToAnotherRecord、Lookup、Rollup、SingleLineText、附件、货币、公式等 ⚡ 角色访问控制:不同级别的细粒度访问控制 用于工作流程自动化的 App Store 我们在三个主要类别中提供不同的集成。详情请参阅应用商店。 ⚡ 聊天:Slack、Discord、Mattermost 等等 ⚡ 电子邮件:AWS SES、SMTP、MailerSend 等 ⚡ 存储:AWS S3、Google Cloud Storage、Minio 等 接口访问 我们提供以下方法让用户以编程方式调用 ...
Doploy outline without docker
Created2023-12-06
非Docker方式部署outline预研了几个可托管部署的团队wiki,看了一圈还是觉得outline比较合适。但是不太希望以docker的方式来部署,所以折腾下本地非docker方式的部署方案。记录如下。 需求作为团队知识管理系统,选型上重点考虑以下需求: 开源,可定制。 支持多机部署。即所有数据不存储在本地,而是外部存储服务中。 Markdown语法支持。 可导出Markdown。即随时可以切换到别的平台。 团队协作的权限管理。针对用户设置不同级别的访问权限。内部用户可编辑,外部用户仅查看。 支持多种账号形态。 outline基本符合以上各类条件。支持Slack、Google以及Azure,同时也支持第三方OIDC认证。刚好前段时间预研过dex的用法,所以就以dex作为OIDC的服务方来部署。 部署整体部署流程分为几步: 安装相关依赖,包括Postgres、Redis、minio(可选) 安装OIDC鉴权服务。配置相关认证鉴权参数。 从git下载代码,启动方式参考官方文档即可。 依赖存在以下几个存储依赖: Postgres:用于存储outline内部数据以及文章数据。 ...
Archive Service Governance
Created2023-11-13
业务服务治理背景挑战故障频发上半年新老系统突发N次故障,部分已经影响用户体验。 故障1:xx服务故障,原因为系统设计不合理,导致晚高峰流量突破系统瓶颈,而相关服务缺少过载保护措施。幸好主流程有对应的稳定性措施,未造成大规模影响。 故障2:xx服务故障,原因未开发同学误操作接入层现网配置,且相关变更未同步到团队其他人,另外接入层问题相对隐晦,定位耗时比较长。影响部分用户体验。 故障3:xx服务重构,因老系统交接N手,新接手同学未考虑到老版本的特殊需求,上线后问题一直未大规模暴露。直到某节假日现网问题集中反馈才暴露。 研发效率、质量差几个典型问题: 开发、测试环境冲突,缺少系统集成测试环境:因为业务的复杂性,大部分业务都需要依赖平台相关服务,而平台业务却很少考虑业务的诉求,导致环境各异,开发、测试冲突时有发生。 版本兼容性:业务的特殊性,终端还有N年前的版本在线上,这些都需要后台兼容。后台祖传的服务太多,交接过多手后不清楚哪些特性还在使用,哪些已经废弃。不敢重构。 系统容灾能力考虑不足:容灾措施评估不足,或者年久失修,没有真正经历过故障的考验。当故障发生时发现跟预估的效果差别较大。 ...
Sentinel Code Analyze
Created2023-11-10
sentinel-go背景之前团队在服务治理项目过程中引入了司内稳定性相关的组件,其中也包含了流量控制、熔断降级等稳定性相关的能力,但我一直也没有时间来深挖各模块的实现细节。趁最近有空,看了下阿里开源版本的稳定性组件sentinel实现,整体感觉代码结构清晰,在并发控制、性能优化细节上也做了不少工作,于是花时间仔细阅读了下部分代码,并输出笔记一篇。 另外写文章之前发现sentinel的官方文档非常细致,包括功能使用以及原理介绍,于是直接copy了部分,并根据最新代码做了修正。最后补充了流量控制的代码分析,其他模块原理也类似,时间有限就没有逐一阅读了。 Sentinel介绍:Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 流量控制任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状。 流量控制有以下几 ...
Introduct to dexide / dex
Created2023-10-24
dexidp / dex 部署及使用简介阅读pocketbase源码时其授权流程比较感兴趣,但pocketbase代码量太大了,授权部分并不是一个独立的模块。之前也看了kratos文档,感觉太过庞大,形态一套自己的生态体系。今天刚好看到了dex的介绍,预览了一下用法和代码仓库,感觉复杂度居中,而且能力不差。所以研究了一下其用法。 功能:降低app开发者实现Identifier provider对接的成本,可以通过Dex来快速实现各类provider的对接。 当用户通过dex进行登陆时,用户的身份信息通常存放在第三方用户管理系统中,例如LDAP。Dex作为客户端和第三方用户管理系统之间的垫片,其价值是,客户端仅仅需要理解OIDC,后端用户管理系统可以随时切换。 用法Demo演示 启动Dex server $ make$ ./bin/dex serve examples/config-dev.yamltime="2023-10-24T06:23:41Z" level=info msg="Dex Version: 6f745746c1c98 ...
Introduct to pocketbase
Created2023-10-23
pocketbase / pocketbase 源码分析功能介绍pocketbase 是一个开源的开箱即用的后端服务(库),使用它可以快速搭建一个典型的后台服务,支持简单的CRUD操作,同时也支持权限控制、关联查询、插件化等特性,包括: CRUD基础能力 大量后台服务的要求就是基于DB的CRUD操作,比如创建一个自定义字段的表格,以及对应的增删改啥。pocketbase提供了一个管理台页面支持快速创建数据表(collection),指定字段名称及字段类型等。后台使用sqlite作为数据engine。 业务方可以通过RESTFUL接口(可以理解为普通用户)实现基础的CRUD操作,当然也可以直接在管理台配置(admin用户)。 权限校验:创建、更新、删除、查询等可以灵活配置规则,比如要求删除记录的用户必须与记录中的用户id保持一致、查询数据(ListRule)时当前用户必须已登录或者属于某个集合等。此功能可以实现比较精细化的权限控制,保护数据安全。 用户管理 除数据表外,还支持用户表的创建。具有同一批用户权限的用户可以存储在同一个用户表中,同一个表中的用户具有类似的权限以及 ...
memos code analyze
Created2023-10-10
简介Memos是一个开源的支持自托管部署的知识库,类似flomo。作为一个go+react实现的产品,功能齐全,且活跃度一直不错,所以找了个时间阅读了一下代码。本次仅记录后端及DB设计部分,前端部分后续有时间了再继续。 安装方法方法一:可能是出于部署便捷的考虑,代码中仅支持docker安装,下面解析Dockerfile中镜像构建步骤,属于典型的多阶构建过程: 协议代码生成:安装buf,buf generate生成协议代码。包括后端所需的pb、grpc、grpc-gateway代码以及前端所需的ts代码。详见buf.yml配置 使用pnpm build编译前端文件,详见前端文件夹(web/)下的package.json 将前端打包结果(web/dist)copy到server目录,build后端服务。注意:项目中使用了go embed,将前端资源目录一并打包到了二进制memos文件中,并在代码中提供了静态文件的读服务。所以部署时不再需要copy前端目录文件,也无需其他反向代理。 //go:embed distvar embeddedFiles embed.FS ...
12…4
avatar
Alex guo
个人技术博客
Articles
40
Tags
37
Categories
0
Follow Me
Recent Post
Cache In Next.js2024-03-25
Introduct to NotionAPI2024-01-06
Architecture of Supabase2023-12-28
Introduct-to-nocoDB2023-12-08
Doploy outline without docker2023-12-06
Tags
秒杀 Microservices Architecture Governance nginx 远程开发 Golang UUID cron memberlist 分布式 memos Git Readingnotes CMS 云函数 RWMutex BaaS redis AUTH golang docker Notion Next.js libuv groupcache gossip Outline Authentication COS nocoDB Supabase HTTPS 工作流引擎 随笔 Vscode Puppeteer
Archives
  • March 20241
  • January 20241
  • December 20233
  • November 20232
  • October 20233
  • September 20232
  • March 20222
  • January 20222
Info
Article :
40
UV :
PV :
Last Update :
©2020 - 2024 By Alex guo
Framework Hexo|Theme Butterfly