Java后台架构理解

最近自己搭建了一些架构,就此写一下对于后台架构的理解。 在平时工作中,总是在考虑什么样的项目结构是最合理,最实用的呢? 有人觉得能让开发人员大大降低工作重复度,使用简单,设计优美,健壮,可扩展的架构,就应当是很不错的架构,但此架构只是项目级别的。 项目一开始从单机项目转变为集群并扩展到微服务,分布式。监控中心,注册中心,配置中心,网关,熔断,降级,分库,分表,容灾,各种中间件的加入与合理搭配,部署配置docker  k8s ,逐渐形成一个庞大的架构体系,保证服务高可用的同时服务器的数量也从一台两台上升至几十台上百台,这样的项目会慢慢成长为庞大的系统体系。 架构设计大到整个系统架构的宏观,架构设计又小到每行代码的微观。 dto 的 aop自动参数校验 ,result 对象封装,代码自动生成,service,mapper,controller,serviceImpl 的合理生成,各个jar包之间的引用,在线文档生成,又到每个数据库字段类型,字段大小,统一表前缀,字段前缀,分布式锁,乐观锁,
7 min read

Java远程桌面实现

突发奇想,使用java是否可以实现远程共享桌面的功能呢? 当然可以了,都是跑代码,但是java效率比较低,为啥,也不是因为java代码执行效率低下,而是因为出于Java自带的屏幕截屏工具效率过低,java提供了robot类来实现桌面截屏,2k屏幕一张jpg大小在200kb左右,一张截图我使用的rx2700x cpu 一张截图竟然需要30毫秒 距离1秒30帧率还是差距有的,更别提1秒60帧率。就算如果1秒60帧率 如何使用 java 高效的传输到各个远程端呢 ? 有人会说使用多线程截图,来提高帧率,这样的做法,我个人觉得不太科学,为啥?因为占用太高cpu资源,应该寻找高效并占用cpu资源较少的方法。 并且图片传输不可取,因为一张图片太大 ,200kb,1s 30张就是 6000kb 严重占用带宽。 最好的方式使用视频流,使用开源的h.264视频格式,还有更好的h.265 但是我并没有找到对应的开源jar。h.265技术还处于收费阶段。h.264视频格式 为根据每一帧中的像素点变化来记录其数据。而不需要记录整个图片中绝大部分像素信息。所以h.264格式的视频体积远远小于图片传输的数
2 min read

MySQL 亿级数据导出excel文档

前言 公司SaaS系统需要给用户提供列表数据导出 excel 文档的功能。 但有的公司的列表数据如财务流水已经高达千万,亿级别,对于这样的数据导出,我们需要提出一个解决方案。不然在月底几百家公司进行导出excel,将会导致mysql QPS急剧上升,服务器cpu,ram,瞬间到达报警阀门。大批量导出可能会导致服务器不可用甚至面临宕机(提示:对于财务等敏感数据,需要做文件加密或者临时文件授权下载操作)。 具体方案 方案的出发点:大批量导出,不能影响正常业务运行。 单独部署一个数据库从库节点进行查询压力分担,再单独部署多组服务器跑上Springboot项目作为MQ的消费者集群,所有的导出请求均请求至MQ队列中,Springboot会采用拉模式主动拉取MQ队列中的导出Excel任务消息进行执行,合理的使用了MQ的削峰填谷以及异步功能。并在SpringBoot项目中严格分配线程池资源。 具体的任务消费者通过亿级分页方案分批量查询mysql列表数据,并使用ali easy excel api进行数据硬盘落盘,完成输出后上传oss(也可以使用oss内网流传输,直接传到oss文件系统中
4 min read

MySQL 亿级数据分页

随着公司业务增大,数据量也是随之剧增。MySQL作为一款社区免费开源数据库。想要用它做几百万的数据分页。光靠limit是不靠谱的。当然不是诋毁mysql,mysql作为开源插拔式存储引擎数据库,已经是可以满足绝大部分的应用场景需求。使用mysql管理100tb也不是问题。但是使用方式却是一个问题。 limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。 limit在偏移量小于10w时性能还勉强可以接受,但随着偏移量越来越大,性能急剧下降。 公司单表账务数据已经到达230w ,做分页limt  来查询最后一页的数据,怕是没有个20秒是查询不出来的。当然具体的时间也要根据是否有索引,字段数量,数据内容而定,查询条件而定。 为了解决分页效率问题,我采用方案是: select id from table limit 100000,20 (带上where条件作为子查询) 由于主键id原本就是主键索引,所以limit的速度效率很高。并把条件字段加入复合索引,效率才会有质量的提升 。 但如
3 min read

浅谈logo设计

在企业没有声望的时候,建立一个logo,给予人们一定的标识性认知,一但企业知名度高了,就可以很好的把图形映射到人们的记忆中,加强企业知名度,可谓是锦上添花。 让人们通过图形记忆来记住公司形象品牌。但记住一定要注册商标、著作权,不然会有侵权的情况,而注册商标也是为了更好的保护公司企业形象。 那么为了设计出人们比较容易记住的图形logo, 这里面涉及到的东西可就比较多了。毕竟还有专业的视觉设计师职位,而logo为了让人的眼球看过去色彩更舒适,更亲近人,看着会有一种放松的感觉,显示出公司特色,容易记忆,这样的logo往往光是设计的费用就高达几十万元。 logo的设计要从公司的企业文化,企业提供的服务角度出发,简单易懂点就是,公司是干嘛的,公司需要的是复古还是年轻充满活力的? 对于一家科技企业,互联网企业来讲,年轻充满活力是必不可少的,颜色可以选择多样化一点,但总体颜色不能太多,略显花哨,适量控制颜色种类,颜色应该略淡,色彩饱满度不可太高,饱满度太高,会让人看着不够放松,越看心情越急躁。 图形形状,这个就得根据公司做的是什么业务和公司想要的是字体图形,还是比较抽象一点的图形。 但互
2 min read

关于使用ELK的记录

最近因为公司系统项目统计压力大 。mysql集群查询进入瓶颈,索引优化也不能快速响应统计结果,于是接入 Elasticsearch、Logstash、Kibana 三大开源套餐。 https://www.elastic.co/cn/ 关于  Logstash 其实还可以使用ali DataX 也是可以的 功能比 Logstash 还要更上一层楼。我采用的还是Logstash,因为ali DataX 我是后面才知道的,所以就没有去替换掉了。 通过 Logstash抓取过滤mysql统计数据,增量同步到Elasticsearch中。 再通过项目java api 调用 Elasticsearch查询; Kibana 可以web可视化集群,索引具体情况。 Elasticsearch查询语句挺简单,但是感觉官网的例子不是很多,很多比较复杂的聚合需要自己摸索。 整个学习难度不是很高。入手很快 java api jar 使用的是 elasticsearch-rest-high-level-client 之后再根据业务场景自己封装了一下工厂,抽象了几层代码给开发人员使用。 api
4 min read

博客从香港迁移到阿里云服务器

以前使用香港服务器4h 4g 90g 5m 150元/月感觉略贵。 就趁着双11阿里云活动买了一台 2h 8g 40g 5m 的国内云服务,3年1399元。确实很便宜一个月算下来38元左右。还是5m宽带,已经可以支持一些小型企业的需求。 就把博客迁移到了国内,由于原来是用的docker,所以这次很快得就部署过来,数据卷什么的都一并迁移。但是由于国内服务器映射域名需要备案,于是去完善了备案信息。审核花了大概6天的时间。 这次在迁移的时候,顺便优化了ssl免费证书Let's Encrypt,用docker certbot部署了自动续签功能,这样ssl证书就算是永久免费了,基本可以放着不用管了。 这台服务器因为还是有8g的内存,我会启动一些自己写的服务。以便给我的demo App提供后台支持。而且https和备案都做好了,也可以写一些个人微信小程序也不是不可以的。 话说以前香港服务器在部署docker时各种神奇的现象,在阿里云里面从未出现过,一帆风顺。想那个时候因为不支持docker的最新存储格式,我还得重新格式化硬盘,改变存储格式。 阿里云还是可以的。虽然有时候感觉网络波动蛮大
2 min read

Vue 浅探

Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。它的核心库只关注视图层,可以很容易地与其他库或现有项目集成。Vue.js 采用了 MVVM 模式,通过双向数据绑定将视图和数据同步起来,使得开发者可以更加方便地管理数据和视图。 Vue.js - The Progressive JavaScript Framework | Vue.jsVue.js - The Progressive JavaScript FrameworkVue.js Vue.js 的特点: 双向数据绑定:Vue.js 通过双向数据绑定来实现数据和视图的自动同步更新,使得开发者可以更加方便地管理数据和视图。 组件化开发:Vue.js 支持组件化开发,可以将一个页面拆分成多个独立的组件,每个组件都有自己的数据和视图,可以方便地复用和维护。 轻量级易上手:Vue.js 的
3 min read

接触 Flutter

Flutter是一款开源的移动应用开发框架,由Google开发和维护。Flutter采用Dart语言编写,具有高效的渲染引擎、丰富的组件库和快速的开发周期,可以用于构建高质量、跨平台的移动应用程序。 Flutter的渲染引擎采用Skia图形库,可以实现高质量、高性能的绘图和动画效果。Flutter的组件库包含丰富的UI组件,可以轻松创建各种样式的应用程序,并支持自定义组件的开发。Flutter还提供了丰富的API和工具,支持快速的开发周期和高效的调试。 Flutter: 为所有屏幕创造精彩Flutter 官方文档中文版,包含 SDK 下载、最新特性介绍、代码示例、开发文档、中文社区等内容。Flutter Flutter的跨平台特性也是其最大的优势之一,可以同时为Android和iOS开发应用程序,而且开发的应用程序可以在不同的平台上实现相同的用户体验。Flutter还支持Web和桌面应用程序的开发,可以为不同的应用场景提供解决方案。 Flutter采用Dart语言作为开发语言,Dart是一种面向对象、静态类型的语言,具有强大的类型推断和异步编程支持,可以提高开发效率和代码质量。
2 min read

关于给ghost博客系统加点插件

本来想给ghost集成一个disqus国外公共留言系统的,这样我的博客就可以拥有留言功能了,但是由于懒,我决定还是用别人做好的东西。 我看了下官方文档,配置非常简单,配置好之后,果然事情并不简单。 配置好了之后,已经生效了,却被墙给挡住了。 我就无语了。 只好有空了去github上找一下别人写好的代理代码。毕竟自己写也要花费点时间。找现成的还是不错滴。 -2019-12-19 我最后还是选择了一款国内的评论系统 Valine [https://valine.js.org/],无广告,免费可用
1 min read

随心笔记

技术无止境 创新不停驻