Seven's blog

你不会找到路,除非你敢于迷路

0%

前言

你好,我是小柒。
Java 程序员,热衷自动化。

前段时间花了 5 天左右,借助 Notion + CloudFlare + Github Actions 零成本搭建了一个支持一键分销的小报童排行榜: https://xiaobot.osguider.com。在这里复盘一下过程,希望能够对你有所启发。

善用 MVP 思维,用最小的成本最快地实现最核心的功能,尽早触达用户,尽早获取反馈,不断迭代,不断升级。

什么是小报童排行榜?

小报童排行榜是一个罗列了(几乎)所有小报童专栏的导航网页。可以帮助你一键分销所有小报童专栏

小报童排行榜-最近更新专栏

阅读全文 »

配置过程

  1. 添加数据文件 _data/site.json,写入以下内容,定义站点信息和 sitemap 中的一些默认值:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    {
    "baseUrl": "https://xiaobot.osguider.com",
    "robots": "/robots.txt",
    "sitemap": {
    "path": "sitemap.xml",
    "changefreq": "daily",
    "priority": 0.5
    }
    }
  2. 添加 sitemap 模板文件,写入以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    ---
    permalink: "{{ site.sitemap.path }}"
    eleventyExcludeFromCollections: true
    ---
    <?xml version="1.0" encoding="UTF-8"?>

    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    {% for page in collections.all %}
    {% unless page.data.sitemap.ignore %}
    <url>
    <loc>{{ site.baseUrl }}{{ page.url | url }}</loc>
    <lastmod>{{ page.date | date: '%Y-%m-%dT%H:%M:%S.%LZ' }}</lastmod>
    <changefreq>{{ site.sitemap.changefreq }}</changefreq>
    <priority>{{ page.data.sitemap.priority | default: site.sitemap.priority | default: 0.5 }}</priority>
    </url>
    {% endunless %}
    {% endfor %}
    </urlset>
  3. 【可选】配置不同页面的 sitemap 表现:

    • 如果不希望某些页面在被包含在 sitemap 文件中,在页面元数据中添加 sitemap.ignore: true 即可;
    • 可以对不同的页面设置不同的 sitemap 优先级,在页面元数据中添加 sitemap.priority: 0.5,取值范围 0-1;
    • 对于分页数据,要设置 pagination.addAllPagesToCollections: true 才会在 sitemap.xml 文件中包含每一个分页页面。
  4. 添加模板文件 src/robots.txt,写入以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    ---
    eleventyComputed:
    permalink: "{{ site.robots }}"
    eleventyExcludeFromCollections: true
    ---
    Sitemap: {{ site.baseUrl }} {{ site.sitemap.path }}

    User-agent: *
    Disallow:

重新编译,over!

参考文档

  • How to create sitemap.xml
  • Sitemap xml
  • liquid
  • sitemap format

  1. GitHub Actions 可以添加运行参数。我只需要设置 filepath 和 content 两个参数,然后配合 shell 脚本就可以自动生成和提交博文到 GitHub 仓库,进而触发自动构建和发布。

  2. GitHub Actions 提供了 REST API 来触发前面的工作流,这样我就可以通过 HTTP 请求来自动生成和发布博文。

  3. 开源服务指南数据库现在是建立在 Notion 上的,Notion 也提供了 REST API 的交互方式。所以我只需要定时扫描 Notion 数据库,获取状态刚变更为 “已发布” 的博文,提取文章内容,通过第 2 步中提到的 REST API 来触发第 1 步中提到的 GitHub Actions 即可自动生成和发布博文。这里我使用了 Cloudflare Workers 实现。

  4. 怎么监测 Notion 数据库文章状态变动呢?想要监测状态“变动”,我们需要知道变动前的状态和变动后的状态,进而需要有数据库缓存变动前的状态,能做,但麻烦。所幸,pipedream 帮我们做好了这个事情。它能够监测 Notion 数据库变动,并且触发工作流执行。

阅读全文 »

概念

选型

后端

Activiti

activiti 由 Alfresco 软件开发,目前最高版本 activiti 7
activiti 有 5、6、7 几个主流版本。其中 5 和 6 的核心 Leader 是 Tijs Rademakers,后来由于内部分歧,Tijs Rademakers 在 2017 年离开团队,创建了 flowable。
现在 activiti 由 Salaboy 团队接管,5 和 6 两个版本已经暂停维护,activiti 7 仍然使用 activiti 6 的内核,并没有开发新的特性。只是在 activiti 上层封装了一些应用。

flowable

名词

  • CDC(Change Data Capture): 数据变化捕获
  • ETL(Extract Transform Load):数据提取、转换、载入

工具

特色 Canal mysql_streamer go-mysql-transfer Maxwell Databus DataX
开源方 阿里巴巴 Yelp - zendesk LinkedIn 阿里巴巴
开发语言 Java Python Golang Java Java Java
活跃
高可用 支持 支持 支持 - 支持 -
文档 详细 还行 详细 详细 详细 还行
数据源 Mysql Mysql Mysql Mysql Mysql
Oracle
MySQL
Oracle
OceanBase
SQLServer
PostgreSQL
DRDS
ALL_RDBMS
ODPS
OSS
OTS
Hbase0.94
Hbase1.1
Phoenix4.x
Phoenix5.x
MongoDB
Hive
Cassandra
TxtFile
FTP
HDFS
TSDB
TDengine
OpenTSDB
接收端 编码定制 Kafka等(MQ) Redis
MongoDB
Elasticsearch
RabbitMQ
Kafka
RocketMQ
HTTP API
后续支持更多
stdout
Kafka
Kinesis
Nats
Google Cloud Pub/Sub
Google Cloud Bigquery
RabbitMQ
Redis
SNS
编码定制? MySQL
Oracle
OceanBase
SQLServer
PostgreSQL
DRDS
ALL_RDBMS
ODPS
OSS
OTS
Hbase0.94
Hbase1.1
Phoenix4.x
Phoenix5.x
MongoDB
Hive
Cassandra
TxtFile
FTP
HDFS
TSDB
TDengine
ADS
OCS
Elasticsearch
全量数据初始化 不支持 支持 支持 支持(maxwell-bootstrap) - 支持
数据格式 编码定制 Json(固定格式) Json(规则配置)
模板语法
Lua脚本
Json (固定) 编码定制? -
备注 需要写代码定制接受端 可扩展性更强,但是上手难度更高 数据同步非实时
实际使用配合 datax-web 体验更佳
阅读全文 »