"Request Lifecycle at Prom.ua", Vitaliy KharytonskiyFwdays
A detailed journey of a single user request through prom.ua infrastructure including hardware, networks, services, and databases.
This talk will feature an explanation of our architecture and reasons behind its current state and external and internal challenges which arise in a high load project built completely on premise.
This document provides instructions for creating a gRPC Hello World sample in C# using .NET Core. It describes creating client and server projects with protobuf definition files. The server project implements a Greeter service that returns a greeting message. The client project calls the SayHello method to get a response from the server. Running the projects demonstrates a basic gRPC communication.
The document discusses the roles and responsibilities of a project manager in software development. It covers the software development lifecycle (SDLC), common methodologies like SCRUM, and the differences between projects and products. It also describes the typical project team roles and the key duties and qualities of an effective project manager, such as planning, organizing, leading, controlling, clear communication, managing expectations, and prioritizing the team over oneself.
"Request Lifecycle at Prom.ua", Vitaliy KharytonskiyFwdays
A detailed journey of a single user request through prom.ua infrastructure including hardware, networks, services, and databases.
This talk will feature an explanation of our architecture and reasons behind its current state and external and internal challenges which arise in a high load project built completely on premise.
This document provides instructions for creating a gRPC Hello World sample in C# using .NET Core. It describes creating client and server projects with protobuf definition files. The server project implements a Greeter service that returns a greeting message. The client project calls the SayHello method to get a response from the server. Running the projects demonstrates a basic gRPC communication.
The document discusses the roles and responsibilities of a project manager in software development. It covers the software development lifecycle (SDLC), common methodologies like SCRUM, and the differences between projects and products. It also describes the typical project team roles and the key duties and qualities of an effective project manager, such as planning, organizing, leading, controlling, clear communication, managing expectations, and prioritizing the team over oneself.
This document discusses improving proto types when using them in collections for RPC applications. It recommends adding an empty message type for void parameters and repeatable types for data collections. Sample code shows defining request/response messages for getting a user by name including a repeated field for the user collection. The server code returns the collection while the client code iterates over it. Implementing an online shop sample is suggested along with using the template method pattern for server internal logic. The document recommends a design patterns book and thanks the reader.
This document provides an overview of software quality assurance and testing. It defines quality as meeting specifications and customer expectations. Software testing investigates quality by providing stakeholders information. Testing is important to prevent defects, as shown by examples of bugs that caused spacecraft and airplane failures costing lives and money. Quality assurance focuses on preventing defects through planning and verification, while quality control identifies defects through action and validation. Defects can be costly so issue tracking systems are used to manage bug lifecycles. Manual testing is time-consuming and relies on human resources while automation testing is faster, more reliable and programmable.
DevOps is a culture and practice that aims to rapidly build, test, and release software. Continuous integration requires developers to integrate code into a shared repository multiple times a day, with each check-in verified by automated builds to detect problems early. Continuous delivery is the practice of releasing every good build to users. Popular tools for continuous integration include TeamCity, Jenkins, and others.
The document discusses the role of a business analyst in a software project. It explains that a business analyst is involved in requirements gathering and representation. This includes eliciting requirements through preliminary discussions with customers, reviewing requirements with other roles like architects and UX designers, and specifying requirements. Requirements can be represented through user stories, use cases, documents, and other methods. User stories are written from the perspective of users and define what they want to do. Use cases outline interactions between actors and a system. Together, clearly documented requirements help ensure a project delivers business value through the right software solution.
The document discusses the role of a user experience designer, outlining their design process which includes discovering user requirements, creating design concepts and prototypes, validating designs through research and testing, and iterating on their work through collaboration and learning. It emphasizes the importance of an iterative design process driven by user needs.
The document provides an overview of communication capabilities in Android, including networking, useful networking libraries, Bluetooth, and Near Field Communication (NFC). It discusses how to connect to networks, perform network operations on a separate thread, check network connectivity, download data using HTTPURLConnection, and efficiently manage network usage. Libraries covered include Retrofit, okHTTP, Volley, and RoboSpice. The document also provides examples of discovering Bluetooth devices, connecting to Bluetooth devices, and implementing Bluetooth profiles. It concludes with a brief description of NFC technology.
This document provides an overview of best practices for Android Wear development. It discusses how to pair Wear devices, common APIs with Android, showing notifications, distributing Wear apps, defining layouts, accessing views, useful libraries like Gson and EventBus, and other tips.
The document provides an overview of Android application development fundamentals including application components, intents, manifest files, and more. It discusses that Android apps are written in Java and compiled to APK files. The core application components are activities, services, broadcast receivers, and content providers. Intents are used to start components and broadcast receivers register to receive system or app events. Every app must declare its components in the Android manifest.
The document discusses Android location and sensor APIs. It provides an overview of location services in Android, which allows apps to access location through the LocationManager. It also discusses the sensors framework, which gives access to motion, position, and environment sensors. It describes how to identify available sensors, register listeners to receive sensor events, and handle the sensor data. Key classes like SensorManager, Sensor, and SensorEventListener are also summarized.
This document provides an introduction to the Java programming language. It discusses the goals of Java, including being cross-platform, providing security through sandboxing with the Java Virtual Machine, and replacing C/C++. It explains what is needed to run and develop Java applications and the differences between Java editions. The document outlines some key differences between Java and C#/C++ and how to write a basic Java application. It also defines JAR files and provides principles for designing class structures in Java.
This document discusses code quality tools and metrics. It defines technical debt and introduces various metrics like cyclomatic complexity and Chidamber & Kemerer object-oriented metrics to measure code quality. It also discusses tools like SonarQube and SonarLint that can analyze code and provide metrics and reports on code quality, complexity, technical debt and more. SonarQube allows centralizing these metrics and provides different views like code coverage, issues and files. It also features quality gates.
"How we optimized our product without paid solutions", Dmytro NemeshFwdays
The story of how we refused third-party DevOps services and took over all services ourselves. In the process, we made a complete revision of the infrastructure, added new monitoring and profiling tools on production. Action algorithms were built based on tools: Graylog, Grafana, influxDB, Pyroscope, Prometheus. As a result, the utilization of resources decreased by two times, and responses to key APIs were accelerated. During the talk, I'll cover what problems we found, how exactly we improved the metrics, and how we got to swoole.
"gRPC-based microservice communication: pros and cons based on our experience...Fwdays
In modern microservice architectures, selecting the right protocol for interaction between microservices plays a crucial role in the overall performance and reliability of the system. In my presentation, I will share our migration experience from the traditional HTTP API to gRPC, including the motivations behind this decision and the challenges encountered during the migration process.
We will explore the advantages and limitations that gRPC brought to our system and the results of an experiment where we compared the performance of the protocols.
Through real examples, we will check some use cases where migration to gRPC is a great solution and discuss scenarios where this approach might be less effective.
Imagine that you've been given an old project, a Food Delivery app, with the backend written in Laravel 8 and PHP 8.0. The web and mobile interfaces communicate with the backend through an API, but it's currently performing poorly with an average response time of 600ms. The product owner has requested you to optimize the performance and wonders if it's possible to reduce it by a factor of 10. What would you do?
Topics to be Covered:
Nginx Cache
Rememberable package
Redis Cache
Queues: Redis/SQS
Horizon
Octane: Swoole / Roadrunner
Upgrading PHP and Laravel
While you may be familiar with most of these points and possibly already using them, the focus will be on ensuring that you're using them correctly and effectively. In a real-world example, I will demonstrate how we managed to reduce average response times by 10 times. We'll explore what's hidden under Laravel's package magic and discuss ways to mitigate the negative impact on project performance.
By the end of this performance optimization session, you will not only have improved your performance but also gained a deeper understanding of how to utilize the Laravel framework more efficiently.
"Key considerations in implementing a distributed message-sending system usin...Fwdays
Designing and implementing a scalable and reliable message-sending service may seem like a challenging and time-consuming task. However, let's explore some key points of implementation in .NET that will help us achieve the desired level of quality and avoid unexpected obstacles.
To accomplish this, we will:
Explore of some features of the .NET Confluent Kafka driver.
Examine real-life use cases of utilizing .NET channels as an InProc Pub/Sub mechanism to enhance application performance.
Discuss the usage of Minimal API and understand its limitations.
Compare gRPC streaming with HTTP and determine which option is more suitable for our specific scenario.
"Simplifying the Complex: Effective Management of Large-Scale PHP Projects", ...Fwdays
Developing and managing large projects can become a challenge for developers. This presentation will show how to overcome these challenges, using the example of one of the largest open-source PHP projects. We will discuss approaches to code organization, coding standards, effective tools, as well as the role of code review and testing. We won't forget about design patterns either.
JSLab. Роман Якобчук. "Flux в стиле FRP: связываем React и Bacon"GeeksLab Odessa
28.03.15. Одесса. Impact Hub Odessa. Конференция JSLab.
Роман Якобчук. "Flux в стиле FRP: связываем React и Bacon"
Впомните свои превые впечатления от декларативного описания UI в Angular/Ember/React? Это было прекрасно, но пора идти дальше! Я покажу, как строить крупные проекты используя скороть и декларативность Реакта, подкрепив их логикой в стиле FRP. Вы узнаете, что такое "неявный стэйт", как просто от него избавиться с помощью Bacon.js и насколько это облегчает жизнь. Сможете забыть про проблемы с асинхронностью и получать удовольствие от технологий о которых все говорят, но мало кто делает.
Подробнее:
http://geekslab.co/
https://www.facebook.com/GeeksLab.co
https://www.youtube.com/user/GeeksLabVideo
Oleksandr Brychuk "UniSender architecture. Growth from 100kk to 1.5kkk letter...Fwdays
Architecture in 2013 comes from scratch, so is there any hope for the future? Business is primarily about money, but what if the balance between technical improvements and a beautiful look is not maintained.
"Emergency 2015" - the limit after which you need to make drastic changes in the technical component. Carte blanche from business and a rough idea of where to start the transformation.
Why did you choose to go through refactoring? Why did you decide to split the monolith into microservices in 2015, when the hype was just emerging, instead of SOA and monolith? How did you choose where to start? How AWS S3 defeated Ceph and helped save the nerves and funds of DevOps? What nodes of the system have provided us with the opportunity to grow 10-15 times in 5 years without spending much more money on vertical scaling? Stable 1.5 billion letters in 2020.
2. Ще раз про концепцію RPC
• RPC – Remote Procedure Call
• Ідея полягає в передачі керування і даних з
однієї програми в іншу, яка може(і
здебільшого) знаходитись на іншому
фізичному компютері через мережу.
3. Які технології з забезпеченням RPC
є на даний момент ?
Ось тільки вершина айсберга: (з Вікі)
• Sun RPC (бінарний протокол на базі TCP та UDP)
• Net Remoting (бінарний протокол на базі TCP, UDP, HTTP)
• XML-RPC (текстовий протокол на базі HTTP)
• SOAP — Simple Object Access Protocol (текстовий протокол на
базі HTTP)
• Java RMI — Java Remote Method Invocation
• JSON-RPC JavaScript Object Remote Procedure Calls
(текстовий, на базі HTTP)
5. В чому недоліки існуючих
стандартів?
• Близько ¾ клієнт-серверних стандартів базуються на REST +
HTTP/1.1.
• Основний їх недолік
– неефективність протоколу HTTP/1.1
– нестиснені заголовки, відсутність повноцінного двостороннього
звязку, неефективний підхід до викоричтання ресурсів ОС
– Надлишковий трафік, затримки.
– Необхідність «натягувати» свою модель даних на REST, що
часто є надлишковим
7. Protobuf
• Protobuf – це гнучкий, ефективний автоматизований механізм для
серіалізації структурованих даних. (Уявіть собі ХМЛ, але менший,
швидший і простіший)
• Ви визначаєте, як хочете, щоб ваші дані були структуровані один
раз, а потім можете використовувати згенерований код для легкого
зчитування/запису даних, з використанням різних мов
• На даний момент останя версія Protobuf - proto3, в якій є спрощений
синтаксис, деякі корисні нові функції, підтримує багато мов
• Google каже, що protobuf до 10 разів ефективніший, ніж XML-based
протоколи, not bad, а? :))
• Детально про protobuf можна дізнатися тут.
8. Як працює Protobuf
• Програміст визначає, як він хоче серіалізувати інформацію за
допомогою визначення цього в .proto файлі
• Кожне повідомлення в protocol buffer є логічним записом, який
містить серію пар «ключ-значення»
• Детальний опис синтаксису protobuf – тут
• Після визначення повідомлень, потрібно викликати компілятор
protobuf для .proto файла, який згенерує код на відповідній мові (C#,
C++, Java напр.)
• (!) Можна додавати до повідомлень нові поля без втрати сумісності з
попередніми версіями
9. І ще раз: XML vs Protobuf
• Простіші (ага )
• Від 3 до 10 разів менший обєм
• Від 20 до 100 разів швидші
• Є менш неоднозначні (мається на увазі чітке визначення типів в
protobuf)
• Згенеровані класи легше використовувати програмно
13. HTTP/2
• HTTP/2 – лежить в основі транспортування даних gRPC.
• Збільшення ефективності використання мережевих ресурсів за
рахунок використання пріоритетів запитів, стиснення заголовків
HTTP та ін.
• Серйозне збільшення продуктивності для сучасних браузерів і
мобільних пристроїв.
• Забезпечення сучасних вимог до безпеки
16. Корисні посилання:
• Офіційний github gRPC:
https://github.com/grpc/grpc
• Документація, інструкції, туторіали, ВСЕ
http://www.grpc.io/docs/