Коллеги, всем привет! Ищу системного аналитика к себе в команду для работы над одним из ключевых сервисов в логистике Ozon: система управления логистическими точками последней мили. Несмотря на то, что сервис уже довольно зрелый и работает на полную, в нем есть ещё много потенциала для развития. Все сделано на модных микросервисах, используем брокеры сообщений, продукт фулл-стек - много функционала на бэке + есть админка, так что для аналитика просто большой :) От кандидатов ждём хорошее понимание микросервисной архитектуры, навыки SQL для написания запросов средней сложности, опыт проектирования REST-API. Подробнее здесь: https://lnkd.in/eyK_ZHn7
Публикация участника Stanislav Klimov
Больше актуальных публикаций
-
What is gRPC? gRPC is a high-performance, open-source remote procedure call framework initially developed by Google. It leverages HTTP/2 for transport, Protocol Buffers as the interface description language, and provides features such as authentication, load balancing, and more. Key Features of gRPC: - Speed - gRPC is built on HTTP/2 and Protobufs for high throughput and low latency. - Efficiency - The compact Protobuf binary format means smaller payloads than JSON. - Type Safety - Protobufs are strongly typed. - Polyglot - Write services in many popular languages. - Great Ecosystem - Many tools for code gen, load balancing, monitoring, and more. Drawbacks of gRPC: - More Complex - Defining Protobuf schemas and setting up gRPC can have a learning curve. - Not Human Readable - Protobufs are binary, so not as easy to troubleshoot as JSON. - Limited Browser Support - gRPC works best for backend microservices, not front-end apps. – Subscribe to our weekly newsletter to get a Free System Design PDF (158 pages): https://bit.ly/496keA7
Чтобы просмотреть или add a comment, выполните вход
-
How does Docker work? . . The diagram below shows the architecture of Docker and how it works when we run “docker build”, “docker pull” and “docker run”. There are 3 components in Docker architecture: 🔹 Docker client The docker client talks to the Docker daemon. 🔹 Docker host The Docker daemon listens for Docker API requests and manages Docker objects such as images, containers, networks, and volumes. 🔹 Docker registry A Docker registry stores Docker images. Docker Hub is a public registry that anyone can use. Let’s take the “docker run” command as an example. 1. Docker pulls the image from the registry. 2. Docker creates a new container. 3. Docker allocates a read-write filesystem to the container. 4. Docker creates a network interface to connect the container to the default network. 5. Docker starts the container. -- Subscribe to our weekly newsletter to get a Free System Design PDF (158 pages): https://bit.ly/3KCnWXq #systemdesign #coding #interviewtips
Чтобы просмотреть или add a comment, выполните вход
-
Top Redis Use Cases I've used Redis in production for almost a decade. It's reliable and easy to use (if used correctly). Here are my top 5 use cases where it shines: 1. Caching The most common use case is to utilize Redis for caching. This helps protect the database layer from overloading. Redis offers fast lookup for cached data and can help improve application performance. 2. Session Store We use Redis to share user session data among stateless servers. Redis provides a centralized place to store session data and makes it easy to scale out servers. 3. Distributed lock We use Redis distributed locks to grant mutually exclusive access to shared resources. This prevents race conditions in distributed systems. Redis locks are easy to implement and automatically expire. 4. Counter and Rate Limiter We use Redis to track like counts, view counts etc on social media apps. Redis counters provide atomic increments/decrements. We also use Redis to enforce rate limits on our API endpoints. This helps prevent abuse. 5. Leaderboard Sorted sets make it easy to implement gaming leaderboards in Redis. We can add, update, or remove users from the leaderboard and query ranges efficiently. There are many other features in Redis. What are some other real-world use cases where you've used Redis successfully? – Subscribe to our weekly newsletter to get a Free System Design PDF (158 pages): https://bit.ly/496keA7
Чтобы просмотреть или add a comment, выполните вход
-
REST API Cheatsheet It covers: ✅ The six fundamental principles of REST API design ✅ Key components like HTTP methods, protocols, and versioning ✅ Practical tips on pagination, filtering, and endpoint design – Subscribe to our weekly newsletter to get a Free System Design PDF (158 pages): https://bit.ly/3KCnWXq
Чтобы просмотреть или add a comment, выполните вход
-
Top 6 Database Models. . . The diagram below shows top 6 data models. 🔹 Flat Model The flat data model is one of the simplest forms of database models. It organizes data into a single table where each row represents a record and each column represents an attribute. This model is similar to a spreadsheet and is straightforward to understand and implement. However, it lacks the ability to efficiently handle complex relationships between data entities. 🔹 Hierarchical Model The hierarchical data model organizes data into a tree-like structure, where each record has a single parent but can have multiple children. This model is efficient for scenarios with a clear "parent-child" relationship among data entities. However, it struggles with many-to-many relationships and can become complex and rigid. 🔹 Relational Model Introduced by E.F. Codd in 1970, the relational model represents data in tables (relations), consisting of rows (tuples) and columns (attributes). It supports data integrity and avoids redundancy through the use of keys and normalization. The relational model's strength lies in its flexibility and the simplicity of its query language, SQL (Structured Query Language), making it the most widely used data model for traditional database systems. It efficiently handles many-to-many relationships and supports complex queries and transactions. 🔹 Star Schema The star schema is a specialized data model used in data warehousing for OLAP (Online Analytical Processing) applications. It features a central fact table that contains measurable, quantitative data, surrounded by dimension tables that contain descriptive attributes related to the fact data. This model is optimized for query performance in analytical applications, offering simplicity and fast data retrieval by minimizing the number of joins needed for queries. 🔹 Snowflake Model The snowflake model is a variation of the star schema where the dimension tables are normalized into multiple related tables, reducing redundancy and improving data integrity. This results in a structure that resembles a snowflake. While the snowflake model can lead to more complex queries due to the increased number of joins, it offers benefits in terms of storage efficiency and can be advantageous in scenarios where dimension tables are large or frequently updated. 🔹 Network Model The network data model allows each record to have multiple parents and children, forming a graph structure that can represent complex relationships between data entities. This model overcomes some of the hierarchical model's limitations by efficiently handling many-to-many relationships. Over to you: Which database model have you used? -- Subscribe to our weekly newsletter to get a Free System Design PDF (158 pages): https://bit.ly/3KCnWXq #systemdesign #coding #interviewtips .
Чтобы просмотреть или add a comment, выполните вход
-
Why UDP? UDP (User Datagram Protocol) is a lightweight, connectionless protocol. Unlike TCP (Transmission Control Protocol), UDP does not establish a reliable connection or provide error correction and flow control. Instead, it focuses on fast, efficient data transmission, making it suitable for applications that prioritize speed over reliability. UDP is known for its simplicity, low overhead, and ability to tolerate some level of packet loss. It also forms the foundation for newer protocols like QUIC. Here are some common use cases for UDP: 🔹 Live Video Streaming Many VoIP and video conferencing applications leverage UDP due to its lower overhead and ability to tolerate packet loss. Real-time communication benefits from UDP's reduced latency compared to TCP, making it ideal for time-sensitive data transmission. 🔹 DNS DNS (Domain Name System) queries typically use UDP for their fast and lightweight nature. Although DNS can also use TCP for large responses or zone transfers, most queries are handled via UDP to ensure quick resolution of domain names. 🔹 Market Data Multicast In low-latency trading, UDP is utilized for efficient market data delivery to multiple recipients simultaneously. Its ability to broadcast data to multiple endpoints without the overhead of establishing individual connections makes it well-suited for real-time financial data dissemination. 🔹 IoT UDP is often used in IoT devices for communication, sending small packets of data between devices. The lightweight nature of UDP allows for efficient transmission of sensor data and control messages in resource-constrained environments. – Subscribe to our weekly newsletter to get a Free System Design PDF (158 pages): https://bit.ly/3KCnWXq
Чтобы просмотреть или add a comment, выполните вход
-
Why is Redis Fast? Redis is fast for in-memory data storage. Its speed has made it popular for caching, session storage, and real-time analytics. But what gives Redis its blazing speed? Let's explore: 𝗥𝗔𝗠-𝗕𝗮𝘀𝗲𝗱 𝗦𝘁𝗼𝗿𝗮𝗴𝗲 At its core, Redis primarily uses main memory for storing data. Accessing data from RAM is orders of magnitude faster than from disk. This is a major reason for Redis's speed. However, RAM is volatile. To persist data, Redis supports disk snapshots and append-only file logging. This combines RAM's performance with disk's permanence. There is a tradeoff though - recovery from disk is slow. If a Redis instance fails, restarting from disk can be slow compared to failing over to a replica instance fully in memory. So while Redis offers durability via disk, it comes at the cost of slower recovery. A better solution is Redis replication. With a synchronized replica kept in memory, failover is instant with no rehydration. This maintains speed and near-instant recovery. 𝗜𝗢 𝗠𝘂𝗹𝘁𝗶𝗽𝗹𝗲𝘅𝗶𝗻𝗴 & 𝗦𝗶𝗻𝗴𝗹𝗲-𝘁𝗵𝗿𝗲𝗮𝗱𝗲𝗱 𝗥𝗲𝗮𝗱/𝗪𝗿𝗶𝘁𝗲 Redis uses an event-driven, single-threaded model for its core operations. A main event loop handles all client requests and data operations sequentially. This single-threaded execution avoids context switching and synchronization overhead typical of multi-threaded systems. Redis uses non-blocking I/O to handle multiple connections asynchronously. This allows it to support many client connections with very low overhead, Redis does leverage threading in certain areas: - Background tasks like taking snapshots. - I/O threads are used for certain operations. - Modules can use threads. - Since Redis 6.0, it supports multi-threaded I/O for network communication, improving performance on multi-core systems. Redis also uses pipelining for high throughput. Clients pipeline commands without waiting for each response. This allows more efficient network round trips, boosting overall performance. 𝗘𝗳𝗳𝗶𝗰𝗶𝗲𝗻𝘁 𝗗𝗮𝘁𝗮 𝗦𝘁𝗿𝘂𝗰𝘁𝘂𝗿𝗲𝘀 Redis supports various optimized data structures, from linked lists, zip lists, and skip lists to sets, hashes, and sorted sets, among others. Each is carefully designed for specific use cases for quick and efficient data access. Over to you: With Redis now supporting some multi-threading, how should we configure it to fully utilize all the CPU cores of modern hardware when deploying in production? – Subscribe to our weekly newsletter to get a Free System Design PDF (158 pages): https://bit.ly/496keA7
Чтобы просмотреть или add a comment, выполните вход
-
Scaling Database: When and How to Shard Database sharding refers to splitting data across multiple database servers and is commonly used for scaling. However, sharding introduces major operational and infrastructure complexity that should be 𝗮𝘃𝗼𝗶𝗱𝗲𝗱 𝘂𝗻𝗹𝗲𝘀𝘀 𝗮𝗯𝘀𝗼𝗹𝘂𝘁𝗲𝗹𝘆 𝗻𝗲𝗰𝗲𝘀𝘀𝗮𝗿𝘆. 𝗔𝗹𝘁𝗲𝗿𝗻𝗮𝘁𝗶𝘃𝗲 𝗦𝗰𝗮𝗹𝗶𝗻𝗴 𝗔𝗽𝗽𝗿𝗼𝗮𝗰𝗵𝗲𝘀 Vertical Scaling: Use more powerful single database servers with more CPUs, memory, storage and I/O bandwidth. Much simpler to manage than sharding. SQL Optimization: Tune SQL queries and database schema to maximize performance on a single server using proper indexes, efficient SQL, etc. Caching: Use in-memory caches like Redis to reduce database load by serving common queries from the cache instead of hitting the database every time. Read Replicas + Load Balancer: Add horizontal read scaleability without full complexity of sharding. Directs reads across replicas. These optimization approaches should be exhausted before considering sharding. 𝗦𝗵𝗮𝗿𝗱𝗶𝗻𝗴 𝗠𝗲𝘁𝗵𝗼𝗱𝘀 There are two high-level approaches: Vertical Sharding: Split database into columnar tables or sections vs rows. For example, having one table for names and another table for emails. Horizontal Sharding: Split database into row partitions distributed evenly across multiple servers. Methods include range based, directory based, and hash based sharding. 𝗪𝗵𝗲𝗻 𝘀𝗵𝗮𝗿𝗱𝗶𝗻𝗴, 𝘂𝘀𝗲 𝘁𝗵𝗲 𝘀𝗶𝗺𝗽𝗹𝗲𝘀𝘁 𝗮𝗽𝗽𝗿𝗼𝗮𝗰𝗵 that meets requirements to minimize complexity. Seek to avoid sharding until necessary despite the scaling benefits. The infrastructure and operational overheads often outweigh gains. – Subscribe to our weekly newsletter to get a Free System Design PDF (158 pages): https://bit.ly/496keA7
Чтобы просмотреть или add a comment, выполните вход
-
Three pillars of observability: logging, tracing, and metrics. 🔹 Logging Logging involves recording discrete events within a system, such as incoming requests or database accesses. It typically generates high volumes of data. The ELK stack (Elasticsearch, Logstash, Kibana) is commonly used to build log analysis platforms. Implementing standardized logging formats across teams for efficient search in log datasets. 🔹 Tracing Tracing provides insight into the journey of requests across system components like APIs, load balancers, services, and databases. It is instrumental in identifying performance bottlenecks. OpenTelemetry offers a unified approach for implementing logging, tracing and metrics within a single architecture. 🔹 Metrics Metrics represent aggregate data points reflecting a system's operational state, including query rates, API responsiveness, and service latencies. This time-series data is collected in databases like InfluxDB and often processed by tools such as Prometheus, which supports querying and alerting based on specific criteria. Visualization and alerting on metrics can be done in platforms like Grafana, which integrates with various alerting mechanisms like email, SMS, or Slack. Which tools have you used for observability? – Subscribe to our weekly newsletter to get a Free System Design PDF (158 pages): https://bit.ly/496keA7
Чтобы просмотреть или add a comment, выполните вход
-
A picture is worth a thousand words: 9 best practices for developing microservices. When we develop microservices, we need to follow the following best practices: 1. Use separate data storage for each microservice 2. Keep code at a similar level of maturity 3. Separate build for each microservice 4. Assign each microservice with a single responsibility 5. Deploy into containers 6. Design stateless services 7. Adopt domain-driven design 8. Design micro frontend 9. Orchestrating microservices – Subscribe to our weekly newsletter to get a Free System Design PDF (158 pages): https://bit.ly/3KCnWXq #systemdesign #coding #interviewtips .
Чтобы просмотреть или add a comment, выполните вход