durl 是一个分布式的高性能短链服务,逻辑简单,部署方便.经过多次迭代,现发布正式版本.
发现在github中已有的短链服务中,非分布式服务无法做到快速扩容,并且有些项目是用的redis作为数据缓存,性能上不够优秀.
短链接,通俗来说,就是将长的URL网址,通过程序计算等方式,转换为简短的网址字符串。
微博和Twitter都有140字数的限制,如果分享一个长网址,很容易就超出限制。
营销短信,字数的限制,当字数过长: 1.不美观 2.超出字符额外收费。
生成二维码的原始链接,当原始链接过长时,生成的二维码过于复杂,导致一些像素较低的手机无法扫描.
- beego 为项目web框架.
- 使用了 xorm 来实现持久数据存储, 项目已测试 mysql.
- 使用了 mcache 来实现内存缓存.
- 因使用内存缓存作为缓存池,实际使用中,项目本身的性能瓶颈更多体现在数据库自身.(单机qps轻松上w)
- 项目内存消耗大多为缓存内存所用容量,可通过配置文件进行内存大小限制.
portal: 首页可以通过页面进行短链生成.公司内部或者公司外部可以通过页面生成短链接.
openApi: 对内开放api,增删改查. 一般来说可以部署为只内网访问.
jump: 只服务短链跳转.作为专门的跳转服务,当需要单机性能不够时,可直接横向扩容.
backend: 为后台管理页面,可管理短链接与黑名单. 可作为公司内部系统增加模块嵌入页面.
这样分为四个模块的原因,是因为根据需要进行部署,需要那个就部署那个. 因为这个项目的结构原因,整个项目四个模块之间没有耦合,可以随意增加pod数量,来提高系统性能.
![14241734315638_ pic](https://private-user-images.githubusercontent.com/182221834/395937988-0ffb1ee0-aafe-4a6d-af68-f0199f06b1e7.jpg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MjcxOTEsIm5iZiI6MTczODkyNjg5MSwicGF0aCI6Ii8xODIyMjE4MzQvMzk1OTM3OTg4LTBmZmIxZWUwLWFhZmUtNGE2ZC1hZjY4LWYwMTk5ZjA2YjFlNy5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwN1QxMTE0NTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03OWMxYzM1NmI4MDY5M2ZhZTFhMjk0YTMwODM1ZDZlY2QyMmJhNWQ2ZTZkYWIzZDRkNzFiNzE0OGRkM2Y5YzUwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.rmD3nwQ1QtPvipW8e6geuFGPb6DyQFdCej7xFjfX390)
![14251734315660_ pic](https://private-user-images.githubusercontent.com/182221834/395938016-e6161894-8ad9-4ff1-b8e1-742a7a39b96e.jpg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MjcxOTEsIm5iZiI6MTczODkyNjg5MSwicGF0aCI6Ii8xODIyMjE4MzQvMzk1OTM4MDE2LWU2MTYxODk0LThhZDktNGZmMS1iOGUxLTc0MmE3YTM5Yjk2ZS5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwN1QxMTE0NTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lNjQ3NTFlZTE4NzU1YmQzOTVhMWFlZGY1NzgwZWUzOWU2MjhiNmQ5ZmVkMWZmNWE3ZDJlMWJhMmNmM2QzY2VlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.9vZ71urMtYzwd_AEfuJDRd4G7rXYkrZK8xJSAB7bSqI)
- 导入数据库文件 文件地址: durl/doc
- 修改 durl/build/durl 目录下各个模块的配置信息
- 在 durl/build/durl 目录下 执行 docker-compose up -d
在 durl/build 目录下提供有全模块的dockerfile demo. 可以根据需要进行修改后部署.
durl 是根据JetBrains sro授予的免费JetBrains开源许可证与GoLand一起开发的,因此在此我要表示感谢。