About
Work Experience#
I have been working with Beijing ColorfulClouds Technology Co.,Ltd as a Backend Engineer since July 2019. Here, I am responsible for:
- Upgrading our Weather Core API from Python 2.7 to Python 3.7 in 2019.
- A transition was made from maintaining a forked ujson library,
nujson
, to deploying orjson in the third quarter of 2022.
- A transition was made from maintaining a forked ujson library,
- Refactoring the push notification system for the ColorfulClouds app.
- This involved using a Python Producer with Celery workers to write push tasks as Protocol Buffers to a Redis list, which were consumed by a Golang worker.
- This approach enabled us to send about 3,000 notifications per second.
- Recoding high throughput internal Flask & FastAPI services using Go+Gin to
offer high speed geo computing and weather station data APIs.
- This allowed us to reduce infrastructure to 4 machines (previously 7), each with 8 CPUs and 16GB memory, while achieving a maximum QPS of 10K and a p99 latency under 2ms.
- As a result, the Core API’s response time was shortened to 20ms when calling these internal services.
- The new system can compute input
(latitude, longitude)
data to identify its administrative area in less than 0.02ms through a polygon search.
- Revamping many years of legacy code to fit into modern architecture under
Kubernetes.
- We managed to achieve cross region traffic migration without any downtime in Q1 2023.
- Developing an animation system for weather layer, demo, which has proven hugely beneficial for marketing purposes.
- Creating a system to archive and query historical weather station data. The system stores data in multiple Parquet files and utilizes a few Celery workers to perform asynchronous read and processing tasks.
Technologies I used:
- Redis (PubSub / Hash / List)
- MongoDB (Geo Index / Aggregation)
- Kubernetes (Deployment / Statefulset / Cronjob)
- Python (Flask / Gunicorn / Uwsgi / NumPy / FastAPI / Celery / Parquet /
Polars)
- We decided to stop using FastAPI for CPU intensive services as Python’s AsyncIO scheduler wasn’t efficient for high throughput QPS needing multiple cores for acceleration.
- However, we continue to use Flask services requiring specific features that only NumPy can provide, which isn’t possible with Go.
- Geo Computing (H3 / Slippy Tiles / Timezone / Administrative Boundary Check / Point-In-Polygon / Ray casting / …)
- Go: (Gin / Protocol Buffers / gRPC)
- Rust (Creating Python extensions, such as tzfpy)
Side Projects#
I have developed several side projects:
- Fast timezone packages
- A forked version of
wego
with Caiyun API support, demo - Go package
aqi
for computing AQI (Air Quality Index)
Education#
I obtained a bachelor’s degree in Information and Computing Science from the North China University of Technology from 2015 to 2019.