Several friends have asked me why updates have been slow recently. Busy work is one thing, and my motivation to update articles has really dropped. Nearly half a year has been updated in the “Online interviewer” series, up to now has 40.

To be honest, I updated the series in large part for my own interview. Now that you’re hired, you’re not going to change jobs anytime soon, so there’s less incentive to update the series.

Anyway, I didn’t have any problems with the knowledge I had prepared for the online Interviewer series during the interview a while ago.

Recently, I still need a lot of time to settle down what I am doing at work, and I cannot write a good article to share with you in a short time.

Based on the above questions, this period of time seems to be in an endless loop, can not get out.

01, ideas,

For a long time, I wondered if I should write a “small project” with continuous iterations.

This way, I can continue to write code in my free time, and subconsciously push myself to keep learning as I work on projects.

I spent all my free time in code articles and learning, and I didn’t write much code (:

At work, I write code all the time, but the code I write is not my favorite.

Your code sucks, but you don’t feel like your code sucks. Most of the time, I feel that my code is good, but a colleague comes in and does a handful of requirements, and I feel that the code is rotten. Does anyone else have the same idea I do?

Since graduation work, more and more found that their grasp of the knowledge is one-sided. Most people go to companies where the technology environment is built, the technology is packaged, and we just tinker with what we already have.

A lot of times we don’t have a choice, we just keep using what the company uses. Unless we start a new project, do new features, and after research maybe we can use the technology stack in our own project.

02, the difficulty

I still remember that I once said to the leader in a meeting: The reason why you can do so many things now is largely due to the whole environment of the company. If you leave the company, can you build it and run it well?

I thought about it from the point of view of the system I was maintaining, and I thought it was really difficult.

At that time, I was maintaining a touch system (simply understood as sending messages to users), which sounded simple, but actually used a lot of technology stack: RPC calls, distributed configuration center, Redis, Flink, MySQL, SSM development environment, MQ, rules Engine, ELK logging, distributed scheduled task scheduling, Hive, Elasticsearch, etc

It basically uses all the major Java backend technology stacks (:

Some people might wonder; With your core functionality so simple (just sending a message), do you really use the stack mentioned above in a production environment? You’re not blogging about this, are you? I don’t believe it.

This is true, and each stack has a reason to exist:

  • RPC calls: For example, marketing messages need to rely on DMP (User portrait System) data and need to invoke the INTERFACE of DMP. Wechat class messages need to be accessToken, user service-related interfaces need to be called, etc. All these dependencies need to be called remotely (RPC calls are more elegant in code side).
  • Distributed Configuration Center: Flexible configuration of all kinds of information, the technical framework is YYDS. For example, the value of limiting traffic can be written in the distributed configuration center, so that the rate of limiting traffic can be changed flexibly.
  • Redis: High performance memory read and write, can be used to refilter or statistics. For example, Redis is used for de-duplication (TTL is very suitable for message delivery).
  • Flink: real-time stream processing platform, which can be used to clean buried messages (buried messages are actually message link data information, and key link information is recorded during message delivery)
  • MySQL: Stores metadata stores that require transactional support data or that change less. For example, meta-information about applets templates can be stored in MySQL
  • MQ: A great aid to system decoupling, asynchronism, and peak peaking (receiving buried information or improving response interface speed). For example, a lot of log data can be thrown into Kafka first
  • Rule engine: combined with distributed configuration center, common requirements can be realized without system release. For example, the SMS access logic is written in the rule engine, and the new SMS access system does not need to be published
  • ELK log framework: a good helper for troubleshooting and handling problems. For example: log in key places, no longer log on every machine to see the log, directly through the keyword search
  • Distributed scheduled task scheduling: Periodically updates data and triggers tasks in a cluster environment. For example, marketing messages are sent periodically based on time, and a machine is assigned to trigger them in a clustered environment using a scheduled task scheduling framework
  • Hive: Offline data storage to help data warehouses obtain platform data
  • Elasticsearch: Query data by content/title
  • .

You can see the stack of technologies listed, each of which can be explored in depth (companies of a certain size will have dedicated developers iterating and maintaining each of the technologies mentioned above).

In addition to the listed backend technology stack, a more mature project has many details, including but not limited to: monitoring alarms, automated integration deployment (publishing), load balancing (Nginx), and other operations side things.

It’s really hard for one person to do these things completely (:

03, blood

I’ve been curious all my life. I want to know how certain business scenarios work, how certain technologies work, where there are defects in what I am responsible for, what can be improved, how it compares with similar systems in other companies, and how I can continue to improve.

But because the company related content is not free to open, so a lot of time is “closed” their own play. (As for whether the system is good or not, I feel good about myself. How far apart from others, I don’t know)

Now see my public number has small white, also have a lot of big company big man.

If I have good experience to share, xiao Bai can learn from my experience and improve themselves after reading, I feel that what I write is very worthwhile.

When my code implementation or ideas are already behind, if I can have a big boss to help me point out, I then learn and adjust, I this is another wave of blood profit.

04. Project Content

I used to work in advertising and touch systems, so I don’t know much about other projects. When I was a student, mall projects were popular online (though they seem to be now).

I don’t understand why there are so many online mall projects when I haven’t worked before, and I don’t understand even more now that I have worked.

In fact, there are many Internet businesses, and e-commerce is only one of them

I was lucky enough to be an interviewer before, and I met some interns. Many of them are also written on my resume. For these projects, I ask about the project or technical details, and they are almost always poorly expressed (for projects like mall, many of the functions are in the real development scenario business, thanks to mall, these systems are still obscure for beginners).

As FAR as I know, things like seckill are not as complicated as they might be in a production environment.

Writing the project from scratch this time, I would like to focus on “touch system”, which is easier to understand and almost every company has such a system (if not, it should be changed to another one).

05. Article updates

The project will not be iterated quickly. I plan to keep iterating and updating in the form of blog. There are a lot of things we can talk about in this process.

  • When building the project, I’ll talk about why Maven and why SpringBoot
  • When writing business code, I will talk about why I prefer to write single-table structures rather than join or sub-query
  • Why a distributed configuration center for this scenario, why a rules engine, and what are the benefits
  • .

There are a lot of ideas and I am not familiar with them (what I said may not be right, but after communication and in-depth study, I can sort out my thinking process again). I think in this process, for the young white rookie, there will be some gains.

There are a lot of details I haven’t figured out yet, like the front end is a bit of a headache for me (but I don’t expect to touch it for two months).

I found that a lot of people care about what technology I use on the front end and how I write it.

To be honest, I don’t know. When I was in college, I did HTML+CSS+JavaScript+jQuery+Ajax+BootStrap for the front end, which could be used as the background page.

When I graduated, I heard a lot about Vue+Angular+React, and the Node.js environment. I didn’t learn any of these things (and I’m not interested in learning them yet).

We have a lot of details to work out on the front end, but we’ll see. Who knows, maybe maybe there’s a big guy to back it up? But I’ll probably write it myself, since I don’t need to ask anyone else to do what I can do.

So, today, I would like to update the introduction of Austin and the arrangement of THE Austin project in Q4. After finishing the arrangement of Q, I will continue to supplement the zero chapter.

In my opinion, the Austin project is simple, playable, and has a rich technology stack for beginners.

In the later writing, I will intersperse some highlights of the project in my opinion. My goal is that this project will become a project on the resume of Java little white people (no longer a uniform mall project).

06. Project Introduction

Core function of Austin project: sending messages

Significance of the project: As long as there is a need to send messages, there should be a project like Austin to send all kinds of messages uniformly. This facilitates the collection of functions and improves the efficiency of business requirements development

07. Project Flow chart

The core flow of the Austin project: Austin-API receives a send message request and directs the request to MQ. Austin-handler MQ messages are consumed by handlers for each type of message

Question 1: Why do I need MQ to send a message?

Answer 1: Sending a message actually calls the API provided by each service. Assuming that the service of a message times out, Austin-API will have the risk of timeout if it calls the service directly, dragging down the performance of the entire interface. MQ is here to be asynchronous and decoupled, and to some extent resilient to business traffic.

Question 2: What is the use of Austin-Stream and Austin-Datahourse?

Answer 2: Austin-handler will do some general service processing and send messages during the message sending process, which will generate a large amount of log data. Log data is collected to MQ, consumed by the Austin-Stream processing module, and finally written to austin-Datahourse

Question 3: What do austin-admin and Austin-cron do?

Answer 3: Autsin-admin is the management background of Austin project, responsible for message management and viewing message delivery. Services can directly send scheduled messages through the Austin-admin management background. Austin-cron carries scheduled tasks.

08. Technical architecture diagram of the project

2021-11~2021-12 Functions:

The technology stack introduced to implement the functionality:

Gitee Link: Gitee/Austin

GitHub link: GitHub/Austin

Follow my wechat official account [Java3y] to chat about the project! Continuous high-intensity updates to online Interviewers + Writing Java projects from scratch! O star,

Original is not easy!! Three times!!